Можно ли как-то произвести десериализацию разных по названию элементов, но одинакового содержимого в один список?
XML
<template>
<images>
<small>
</small>
<large>
</large>
<small>
</small>
<large>
</large>
</images>
</template>
CODE
public class myclass
{
[XmlElement("small")]
[XmlElement("large")]
ObservableCollection<MyImage> myimage
{get;set;}
}
При таком определении, он ругается, что необходимо указать XmlChoiceIdentifierAttribute
Хотя как мне кажется, он тут не причем...
Писать свой десериализатор очень не хочется.
PS: Или, конечно, как вариант, можно попробовать сделать два разных списка, а потом в ListView из привязать мультибиндингом? Как правильнее подойти к этому вопросу?
Я сгенерировал набор классов по представленному XML с помощью Студии: Edit > Paste Special > Paste XML As Classes. Обработал их напильником, убрав все лишние атрибуты и поля.
Также я предположил, что элементы должны содержать в себе вложенные свойства. Примерно так:
<template>
<images>
<small>
<size>100</size>
</small>
<large>
<size>1000</size>
</large>
<small>
<size>110</size>
</small>
<large>
<size>1100</size>
</large>
</images>
</template>
В итоге у меня получился такой набор классов:
[XmlRoot("template")]
public class Template
{
[XmlElement("images")]
public TemplateImages Images { get; set; }
}
public class TemplateImages
{
[XmlElement("large", typeof(Image))]
[XmlElement("small", typeof(Image))]
[XmlChoiceIdentifier("ItemsElementName")]
public Image[] Items { get; set; }
//[XmlElement("ItemsElementName")]
//[XmlIgnore()]
public ItemsChoiceType[] ItemsElementName { get; set; }
}
public enum ItemsChoiceType
{
large,
small,
}
public class Image
{
[XmlElement("size")]
public int Size { get; set; }
}
Вроде работает и без закомментированных атрибутов.
using (var fs = new FileStream("test.xml", FileMode.Open))
{
var xs = new XmlSerializer(typeof(Template));
var template = (Template)xs.Deserialize(fs);
foreach (var item in template.Images.Items)
Console.WriteLine(item.Size);
foreach (var name in template.Images.ItemsElementName)
Console.WriteLine(name);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возникла проблема при преобразовании переменной string в datetime
Подскажите пожалуйста, почему может не срабатывать событиеВот мой код
Через кнопки пытаюсь взаимодействовать со списком, добавлять/удалять элементы, изменять размер строк(ячеек) через SliderНо всё это не отображается,...