C# 反序列化xml

C# 反序列化xml,c#,xml,xml-serialization,xml-deserialization,C#,Xml,Xml Serialization,Xml Deserialization,我需要创建一个可以从此XML反序列化的对象 <Item> <Description>Timber(dry)</Description> <Measure Type="VOLUME"> <Value>1.779</Value> <Units>m3</Units> </Measure> <Measure Type="WEIGHT

我需要创建一个可以从此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>

木材(干)
1.779
m3
925.08
公斤
1.
单位
我的问题是度量,它需要是某种类型的列表,但当我创建 列出不正确的序列号

  <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>

木材(干)

您需要用
[xmlement]
属性修饰
Measures
属性,以指示序列化程序需要将其序列化(和反序列化)为(裸)元素,而不是将其包装在另一个元素中

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);
    }
}
公共类堆栈溢出\u 13188624
{
常量字符串XML=@“
木材(干)
1.779
m3
925.08
公斤
1.
单位
";
公共类项目
{
公共项目()
{
this.Measures=新列表();
}
公共字符串说明{get;set;}
[System.Xml.Serialization.xmlement(ElementName=“Measure”)]
公共列表度量值{get;set;}
}
公共阶级措施
{
公共字符串值{get;set;}
公共字符串单位{get;set;}
[System.Xml.Serialization.XmlAttributeAttribute()]
公共字符串类型{get;set;}
}
公共静态无效测试()
{
MemoryStream ms=新的MemoryStream(Encoding.UTF8.GetBytes(XML));
XmlSerializer xs=新的XmlSerializer(typeof(Item));
Item=(Item)xs.反序列化(ms);
控制台写入线(项目措施);
}
}

。是否通过错误的方式?我已经更新了这个问题。也许它会更清楚一点谢谢,我到处找,但找不到answer@carlosfigueira我问了一个类似的问题,请检查一下,这里:
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);
    }
}