Десериализация XML в ArrayList объектов в C # - PullRequest
1 голос
/ 06 октября 2011

Следующий xml является результатом сериализации ArrayList объектов Asset

<ArrayOfAsset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Asset>
    <name>bill</name>
    <type>perosn</type>
  </Asset>
  <Asset>
    <name>bill</name>
    <type>perosn</type>
  </Asset>
 </ArrayOfAsset> 

Я могу десериализовать это с десериализатором C # по умолчанию без проблем.Если мой корневой элемент изменится с ArrayOfAsset на assets , мой десериализатор взорвется.Как я могу сделать так, чтобы мой десериализатор знал об этом изменении.

Вот мой код десериализации:

  StreamReader sr = new StreamReader("c:\\assest.xml");
  string r = sr.ReadToEnd();
  List<Asset> list;
  Type[] extraTypes = new Type[1];
  extraTypes[0] = typeof(Asset);
  System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(List<Asset>), extraTypes);
  object obj = serializer.Deserialize(xReader);
   list = (List<Asset>)obj;

Ответы [ 2 ]

0 голосов
/ 02 августа 2017

Как только вы используете сериализацию «по умолчанию», вы не можете изменить формат XML. Для поддержки улучшенного XML вы должны предоставить некоторые метаданные, которые переопределяют сериализацию по умолчанию. Например: https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlarray(v=vs.110).aspx

Также стоит добавить атрибуты к вашему классу активов (и связанных с ним). Таким образом, вы можете описать [XmlArray] и [XmlArrayItem] для поддержки необходимых тегов / подтегей https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute(v=vs.110).aspx

0 голосов
/ 22 ноября 2013

У меня такая же проблема.

В документации MSDN указано:

Примечание. XmlSerializer не может десериализовать следующее: массивы ArrayList и массивы List.

Но я действительно не знаю, означает ли это, что вы не можете десериализовать массивы ArrayList или ArrayList ... для меня это не ясно.

http://msdn.microsoft.com/en-us/library/dk9cbaf1%28v=vs.110%29.aspx

Использовать сериализатор стека служб:)

...