ExpandoObject未填充所有值

本文关键字:填充 ExpandoObject | 更新日期: 2023-09-27 18:21:37

我继承了一个项目,无法与/不知道该向哪个原始开发人员提问。这是一个.NET MVC项目。

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

以下是我在文件末尾附加的XML:

    <Home_Index>  <NewsletterSignup>
    <SignUpMessage>
      <Copy>
        <![CDATA[
          Want up to $20 in savings?    
        ]]>
      </Copy>
    </SignUpMessage>
    <SignUpMessage>
      <Copy>
        <![CDATA[
          Sign up, stay connected &amp; save up to $20.    
        ]]>
      </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>之前已正确解析。

ExpandoObject未填充所有值

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

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

Home_Index和Newsle时事通讯注册的未关闭标签也令人担忧,所以我关闭了它们。