![](/img/trans.png)
[英]Deserialize multiple xml files with the same root but varying child elements into one with c#
[英]How to deserialize Xml with root than multiple child elements of the same type
我正在嘗試反序列化看起來像這樣的xml文檔
<invoices>
<invoice>2848</invoice>
<invoice>2849</invoice>
<invoice>2850</invoice>
<invoice>2851</invoice>
<invoice>2852</invoice>
</invoices>
進入C#對象,但是我無法使其正常工作。 我正在使用DataContractSerializer
這是我的班級樣子:
[DataContract(Name = "invoices", Namespace = "")]
public class Invoices
{
[DataMember(Name = "invoice")]
public Invoice[] InvoiceIds { get; set; }
}
[DataContract(Name = "invoice", Namespace = "")]
public class Invoice
{
[DataMember(Name = "invoice")]
public string Id { get; set; }
}
當然這是行不通的。 我收到此錯誤:
{"Error in line 1 position 24. Expecting state 'Element'.. Encountered 'Text' with name '', namespace ''. "}
我不受Xml的控制。
在這種情況下,請嘗試使用[CollectionDataContract]
:
public class StackOverflow_10705733
{
[CollectionDataContract(Name = "invoices", ItemName = "invoice", Namespace = "")]
public class Invoices : List<int>
{
[DataMember(Name = "invoice")]
public int[] InvoiceIds { get; set; }
}
public static void Test()
{
DataContractSerializer dcs = new DataContractSerializer(typeof(Invoices));
string xml = @"<invoices>
<invoice>2848</invoice>
<invoice>2849</invoice>
<invoice>2850</invoice>
<invoice>2851</invoice>
<invoice>2852</invoice>
</invoices>";
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml));
Invoices value = dcs.ReadObject(ms) as Invoices;
Console.WriteLine(string.Join(",", value));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.