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 & 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 & save up to .
`]]>`
</Copy>
</SignUpMessage>
</SignUpMessages>
</Home_Index>
</NewsletterSignup>
Home_Index 和 NewsletterSignup 的未关闭标签也令人担忧,因此我已关闭它们。
我继承了一个项目,无法与原始开发人员交谈/不认识可以问这个问题的人。这是一个 .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 & 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 & save up to .
`]]>`
</Copy>
</SignUpMessage>
</SignUpMessages>
</Home_Index>
</NewsletterSignup>
Home_Index 和 NewsletterSignup 的未关闭标签也令人担忧,因此我已关闭它们。