Учитывая следующий XML:
<?xml version="1.0"?>
<user_list>
<user>
<id>1</id>
<name>Joe</name>
</user>
<user>
<id>2</id>
<name>John</name>
</user>
</user_list>
И следующий класс:
public class User {
[XmlElement("id")]
public Int32 Id { get; set; }
[XmlElement("name")]
public String Name { get; set; }
}
Можно ли использовать XmlSerializer
для десериализации XML в List<User>
? Если да, какой тип дополнительных атрибутов мне нужно использовать, или какие дополнительные параметры мне нужно использовать для создания XmlSerializer
экземпляра?
Массив ( User[]
) будет приемлемым, если он немного менее предпочтителен.
c#
serialization
xml-serialization
xml-deserialization
Даниэль Шаффер
источник
источник
.Items
участника.Если вы украсите
User
класс,XmlType
чтобы он соответствовал требуемой заглавной букве:Тогда
XmlRootAttribute
наXmlSerializer
CTOR может обеспечить нужный корень и позволяет прямое чтение в List <>:...
Кредит: основано на ответе от YK1 .
источник
XmlSerializer
необходимо статически кэшировать и повторно использовать, чтобы избежать серьезной утечки памяти, см. Подробности в разделе Утечка памяти с использованием StreamReader и XmlSerializer .Да, он будет сериализовать и десериализовать список <>. Просто убедитесь, что вы используете атрибут [XmlArray], если сомневаетесь.
Это работает как с Serialize (), так и с Deserialize ().
источник
Я думаю, что нашел лучший способ. Вам не нужно помещать атрибуты в ваши классы. Я сделал два метода для сериализации и десериализации, которые принимают общий список в качестве параметра.
Посмотрите (это работает для меня):
Таким образом, вы можете сериализовать любой список, который вы хотите! Вам не нужно указывать тип списка каждый раз.
источник
List<MyClass>
документа должен быть указан элементArrayOfMyClass
.Да, он десериализуется в список <>. Не нужно хранить его в массиве и оборачивать / инкапсулировать в список.
Десериализация кода,
источник
Не уверен насчет List <T>, но массивы, безусловно, выполнимы. И немного магии позволяет действительно легко снова попасть в Список.
источник
Как насчет
Не особенно необычно, но это должно работать.
источник