ExpandoObject 未填充所有值

ExpandoObject not being populated with all values

我继承了一个项目,无法与原始开发人员交谈/不认识可以问这个问题的人。这是一个 .NET MVC 项目。

这是我第一次使用 ExpandoObject,所以我正在努力学习。我遵循最初使用的样式,其中将信息添加到 xml 文件,然后解析并存储在 Model 中。当我在视图中调试问题并检查 Model 时,我只看到 XML.

中的两个值中的一个

这是我附加到文件末尾的 XML:

    <Home_Index>  <NewsletterSignup>
    <SignUpMessage>
      <Copy>
        <![CDATA[
          Want up to  in savings?    
        ]]>
      </Copy>
    </SignUpMessage>
    <SignUpMessage>
      <Copy>
        <![CDATA[
          Sign up, stay connected &amp; save up to .    
        ]]>
      </Copy>
    </SignUpMessage>
  </NewsletterSignup>
</Home_Index>

所以当我检查 Model 时,我只看到第二个 <SignUpMessage> 而不是第一个

下面是创建 ExpandoObject 的代码:

public class XmlToDynamic
{
    public static dynamic Parse(String file, XElement node = null)
    {
        if (String.IsNullOrWhiteSpace(file) && node == null) return null;

        node = !String.IsNullOrWhiteSpace(file) ? XDocument.Load(System.Web.Hosting.HostingEnvironment.MapPath(file)).Root : node;

        IDictionary<String, dynamic> result = new ExpandoObject();

        var pluralizationService = PluralizationService.CreateService(CultureInfo.CreateSpecificCulture("en-us"));

        node.Elements().ForEach(gn =>
        {
            var isCollection = gn.HasElements &&
                (
                    gn.Elements().Count() > 1 &&
                    gn.Elements().All(e => e.Name.LocalName.ToLower() == gn.Elements().First().Name.LocalName) ||
                        gn.Name.LocalName.ToLower() == pluralizationService.Pluralize(gn.Elements().First().Name.LocalName).ToLower()
                );

            var items = isCollection ? gn.Elements().ToList() : new List<XElement> { gn };

            var values = new List<dynamic>();

            items.ForEach(i => values.Add((i.HasElements) ? Parse(null, i) : i.Value.Trim()));

            result[gn.Name.LocalName] = isCollection ? values : values.FirstOrDefault();
        });

        return result;
    }
}

我要做的是选择两个<SignUpMessage>然后随机选择一个显示

另外值得注意的是 xml 文件的内容在我添加 <NewsletterSignup> 之前被正确解析。

我认为您需要一个父元素来保存您的两个 SignUpMessages:

<Home_Index>
  <NewsletterSignup>
    <SignUpMessages>
      <SignUpMessage>
        <Copy>
          `<![CDATA[`
          Want up to  in savings?    
          `]]>`
        </Copy>
      </SignUpMessage>
      <SignUpMessage>
        <Copy>
          `<![CDATA[`
          Sign up, stay connected &amp; save up to .    
          `]]>`
        </Copy>
      </SignUpMessage>
    </SignUpMessages>
  </Home_Index>
</NewsletterSignup>

Home_Index 和 NewsletterSignup 的未关闭标签也令人担忧,因此我已关闭它们。