简体   繁体   English

如何用root反序列化Xml而不是多个相同类型的子元素

[英]How to deserialize Xml with root than multiple child elements of the same type

I'm trying deserialize a xml document that looks like this 我正在尝试反序列化看起来像这样的xml文档

<invoices>
  <invoice>2848</invoice>
  <invoice>2849</invoice>
  <invoice>2850</invoice>
  <invoice>2851</invoice>
  <invoice>2852</invoice>
</invoices>

Into a C# object, but I cannot get it to work. 进入C#对象,但是我无法使其正常工作。 I'm using the DataContractSerializer 我正在使用DataContractSerializer

This is what my class looks like: 这是我的班级样子:

[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; }
}

Of course this does not work. 当然这是行不通的。 I get this error: 我收到此错误:

{"Error in line 1 position 24. Expecting state 'Element'.. Encountered 'Text'  with name '', namespace ''. "}

I'm not in control of the Xml. 我不受Xml的控制。

Try using a [CollectionDataContract] for this scenario: 在这种情况下,请尝试使用[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM