У меня есть XML, который содержит статистические данные, это выглядит следующим образом:C# XML десериализация с использованием DataContractSerializer с неизвестным форматом
<?xml version="1.0"?>
-<response>
<responsecode>0</responsecode>
<count>2</count>
-<statistics>
<id>id</id>
<msisdn>somemsisdn</msisdn>
</statistics>
-<statistics>
<id>otherid</id>
<msisdn>othermsisdn</msisdn>
</statistics>
</response>
Я пытаюсь десериализации, но если есть более двух записей - больше элементов будут добавлено и выглядит так, что их нельзя десериализовать в каком-то списке или массиве, т. е. я не знаю точного формата XML.
Вот мой код:
[DataContract(Name = "response", Namespace = "")]
class XMLStat
{
[DataMember(Order = 0)]
public int responsecode;
[DataMember(Order = 1)]
public int count;
[DataMember(Order = 2)]
public List<StatElement> statistics;
//public XMLStat() { statistics = new List<StatElement>(); }
}
[CollectionDataContract(ItemName="statistics", Namespace="")]
class StatElement
{
[DataMember(Order = 0)]
public string id;
[DataMember(Order = 1)]
public string msisdn;
}
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(someurl);
string result = string.Empty;
DataContractSerializer ser = new DataContractSerializer(typeof(XMLStat));
XMLStat stat = new XMLStat();
using (var s = req.GetResponse().GetResponseStream())
stat = (XMLStat)ser.ReadObject(s);
Он упорядочивает responsecode и сосчитать, но список пуст. Я прямо в своем предположении, что это не список (и есть ли какое-либо обходное решение), или я делаю что-то неправильно?
Я думаю, вам нужны '[XmlArray]' и '[XmlArrayItem]' атрибуты для 'List' –
@MikeDebela, похоже, что это не работает. Я пробовал это: 'class XMLStat { [DataMember (Order = 0)] public int responsecode; [DataMember (Order = 1)] public int count; [XmlArray (Order = 2, ElementName = "статистика")] public List статистика; } [DataContract (Name = "Статистика")] класс StatElement { [XmlArrayItem] общественности строка идентификатор; [XmlArrayItem] public string msisdn; } ' –
Jamil