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 & 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>
之前已正确解析。
我认为您需要一个父元素来保存您的两个SignUpMessages:
<Home_Index>
<NewsletterSignup>
<SignUpMessages>
<SignUpMessage>
<Copy>
`<![CDATA[`
Want up to $20 in savings?
`]]>`
</Copy>
</SignUpMessage>
<SignUpMessage>
<Copy>
`<![CDATA[`
Sign up, stay connected & save up to $20.
`]]>`
</Copy>
</SignUpMessage>
</SignUpMessages>
</Home_Index>
</NewsletterSignup>
Home_Index和Newsle时事通讯注册的未关闭标签也令人担忧,所以我关闭了它们。