繁体   English   中英

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

[英]Deserialization XML to object with list in c#

我想反序列化XML到C#中的对象,对象具有一个字符串属性和其他对象列表。 有一些描述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; }
}

有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示例

<?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用作项目时,它不会更改标签的名称。 序列化程序期望<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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM