I XML haben, die statistischen Daten enthält, sieht es wie folgt aus:C# xml Deserialisierung DataContractSerializer mit unbekanntem Format
<?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>
ich versuche, es zu deserialisieren, aber wenn es mehr als zwei Datensätze sind - mehr Elemente werden hinzugefügt, und sieht so aus, als ob sie nicht in irgendeiner Art von Liste oder Array deserialisiert werden können, dh ich kenne das genaue Format von XML nicht.
Hier ist mein Code:
[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);
Es serialisiert Response und zählen, aber Liste ist leer. Bin ich in meiner Annahme richtig, dass dies keine Liste ist (und gibt es einen Workaround), oder mache ich etwas falsch?
Ich denke, Sie brauchen '[XmlArray]' und '[XmlArrayItem]' Attribute für die 'List' –
@MikeDebela, es scheint nicht zu funktionieren. Ich versuchte dieses: 'Klasse XMLStat { [DataMember (Auftrag = 0)] public int responsecode; [DataMember (Order = 1)] public int Anzahl; [XmlArray (Order = 2, ElementName = "statistics")] öffentliche Liste Statistiken; } [Datacontract (Name = "Statistik")] Klasse StatElement { [XmlArrayItem] public string id; [XmlArrayItem] öffentliche Zeichenfolge msisdn; } ' –
Jamil