2012-11-02 192 views
1

我需要创建一个可以从这个XML被deserialised反序列化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; } 
    } 
+0

..并通过错误..? –

+0

我已更新该问题。也许它会澄清更多 – Gaven

回答

3

您需要用[XmlElement]属性修饰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); 
    } 
} 
+0

谢谢,我到处寻找,但无法找到任何答案 – Gaven

+0

@carlosfigueira我问一个类似的问题,请你检查它,在这里:http://stackoverflow.com/questions/13247449/自定义的XML序列化,以全新的标签,和属性和根 – Saeid