我想在C#中反序列化XML到对象,对象有一个字符串属性和其他对象列表。 有些类描述了XML对象,我的代码不起作用(它在下面,XML在我的帖子的末尾)。我的反序列化代码不会返回任何对象。
我认为我对属性做错了,你能检查它并给我一些建议来解决它。 谢谢你的帮助。
[XmlRoot("shepherd")]
public class Shepherd
{
[XmlElement("name")]
public string Name { get; set; }
[XmlArray(ElementName = "sheeps", IsNullable = true)]
[XmlArrayItem(ElementName = "sheep")]
public List<Sheep> Sheeps { get; set; }
}
public class Sheep
{
[XmlElement("colour")]
public string colour { get; set; }
}
有用于将XML反序列化为对象的C#代码
var rootNode = new XmlRootAttribute();
rootNode.ElementName = "createShepherdRequest";
rootNode.Namespace = "http://www.sheeps.pl/webapi/1_0";
rootNode.IsNullable = true;
Type deserializeType = typeof(Shepherd[]);
var serializer = new XmlSerializer(deserializeType, rootNode);
using (Stream xmlStream = new MemoryStream())
{
doc.Save(xmlStream);
var result = serializer.Deserialize(xmlStream);
return result as Shepherd[];
}
我想要反序列化
的XML示例<?xml version="1.0" encoding="utf-8"?>
<createShepherdRequest xmlns="http://www.sheeps.pl/webapi/1_0">
<shepherd>
<name>name1</name>
<sheeps>
<sheep>
<colour>colour1</colour>
</sheep>
<sheep>
<colour>colour2</colour>
</sheep>
<sheep>
<colour>colour3</colour>
</sheep>
</sheeps>
</shepherd>
</createShepherdRequest>
答案 0 :(得分:1)
XmlRootAttribute
在用作项目时不会更改标记的名称。序列化程序需要<Shepherd>
,但会找到<shepherd>
。 (XmlAttributeOverrides
似乎也不适用于数组。)修复它的一种方法是改变类名本身的情况:
public class shepherd
{
// ...
}
使用属性更容易的替代方法是创建一个合适的包装类:
[XmlRoot("createShepherdRequest", Namespace = "http://www.sheeps.pl/webapi/1_0")]
public class CreateShepherdRequest
{
[XmlElement("shepherd")]
public Shepherd Shepherd { get; set; }
}