Я унаследовал проект и не могу поговорить с/не знаю оригинального разработчика, чтобы задать этот вопрос. Это проект .NET MVC.ExpandoObject не заполняется всеми значениями
Это первый раз, когда я работал с ExpandoObject, поэтому я стараюсь учиться. Я следую стилю, который изначально использовался, когда информация была добавлена в xml-файл, а затем анализировалась и хранилась в Model
. Когда я отлаживаю проблему и проверяю Model
в представлении, я вижу только одно значение двух, которые у меня есть в XML.
Вот XML, что я appened до конца файла:
<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>
.
Спасибо, но в моем 'xml' файле они закрыты. Я не уверен, почему, когда я скопировал их на почту, их обрезали. – DFord
Хорошо, не беспокойтесь. Главное - добавить родительский элемент, как я уже говорил в вышеприведенном фрагменте. Это даст вам коллекцию из двух объектов , которые, я надеюсь, вам нужны. –
Phil
в моем отредактированном xml, '' должен выступать в роли родителя для '', правильно? Или есть что-то еще, что мне не хватает? –
DFord