C# 反序列化xml
我需要创建一个可以从此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
<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);
}
}