2

このような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 を制御できません。

4

1 に答える 1

4

[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));
    }
}
于 2012-05-22T16:08:53.413 に答える