反序列化XML以反对在C列表中的对象#

反序列化XML以反对在C列表中的对象#

问题描述:

我想反序列化XML在C#中的对象,对象具有一个字符串属性和其他对象的列表。 有一些描述XML对象的类,我的代码不起作用(它在下面,XML在我的文章的末尾)。我的反序列化代码不返回任何对象。反序列化XML以反对在C列表中的对象#

我想我做了一些错误的属性,你可以检查它并给我一些建议来解决它。 感谢您的帮助。

[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; } 
} 

有C#代码反序列化XML对象

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

XmlRootAttribute不改变标签的名称时,XML实例作为一个项目。序列化程序期望<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; } 
}