1

このXMLから逆シリアル化できるオブジェクトを作成する必要があります

  <Item>
    <Description>Timber(dry)</Description>
    <Measure Type="VOLUME">
      <Value>1.779</Value>
      <Units>m3</Units>
    </Measure>
    <Measure Type="WEIGHT">
      <Value>925.08</Value>
      <Units>Kilogram</Units>
    </Measure>
    <Measure>
      <Value>1</Value>
      <Units>Units</Units>
    </Measure>
  </Item>

私の問題はメジャーです、それはある種のリストである必要があります、しかし私がリストを作成するときそれは間違ってシリアル化されます

  <Item>
    <Description>Timber(dry)</Description>
    <Measures>   <--- Dont want this <Measures> tag
     <Measure Type="VOLUME">
      <Value>1.779</Value>
      <Units>m3</Units>
     </Measure>
     <Measure Type="WEIGHT">
      <Value>925.08</Value>
      <Units>Kilogram</Units>
     </Measure>
     <Measure>
      <Value>1</Value>
      <Units>Units</Units>
     </Measure>
   </Measures> <--- 
  </Item>

これは私が今まで持っているものです

public class Item
  {
    public Item()
    {
      this.Measures = new List<Measure>();
    }    

    public string Description { get; set; }

    public List<Measure> Measures { get; set; }
  }

  public class Measure
  {

    public string Value { get; set; }

    public string Units { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Type { get; set; }
  }
4

1 に答える 1

3

プロパティを別の要素にラップするのではなく、(ベア) 要素としてシリアライズ (およびデシリアライズ) する必要があることをシリアライザーに示すために、Measuresプロパティを属性で装飾する必要があります。[XmlElement]

public class StackOverflow_13188624
{
    const string XML = @"  <Item>
                            <Description>Timber(dry)</Description>
                            <Measure Type=""VOLUME"">
                              <Value>1.779</Value>
                              <Units>m3</Units>
                            </Measure>
                            <Measure Type=""WEIGHT"">
                              <Value>925.08</Value>
                              <Units>Kilogram</Units>
                            </Measure>
                            <Measure>
                              <Value>1</Value>
                              <Units>Units</Units>
                            </Measure>
                          </Item>";

    public class Item
    {
        public Item()
        {
            this.Measures = new List<Measure>();
        }

        public string Description { get; set; }
        [System.Xml.Serialization.XmlElement(ElementName = "Measure")]
        public List<Measure> Measures { get; set; }
    }

    public class Measure
    {
        public string Value { get; set; }
        public string Units { get; set; }
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Type { get; set; }
    }

    public static void Test()
    {
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(XML));
        XmlSerializer xs = new XmlSerializer(typeof(Item));
        Item item = (Item)xs.Deserialize(ms);
        Console.WriteLine(item.Measures);
    }
}
于 2012-11-02T03:24:10.907 に答える