微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# - XmlSerializer 只获取第一个 XML 元素

如何解决C# - XmlSerializer 只获取第一个 XML 元素

我需要序列化一个 XML 字符串并将其绑定到类。问题是,XmlSerializer获取我的 XML 字符串的第一个元素。

var xml = @"<cars>
                <car>
                    <make>Ford</make>
                    <model>Mustang</model>
                    <color>Red</color>
                </car>
                <car>
                    <make>Infiniti</make>
                    <model>G35</model>
                    <color>Red</color>
                </car>
            </cars>";

using (var reader = new StringReader(xml))
{
    var deserializer = new XmlSerializer(typeof(cars),new XmlRootAttribute("cars"));

    var r = (cars)deserializer.Deserialize(reader);
}

这是我要绑定到的类:

using System.Collections.Generic;

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "",IsNullable = false)]
public partial class cars
{
    public carsCar car { get; set; }
}

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class carsCar
{
    public object make { get; set; }
    public object model { get; set; }
    public object color { get; set; }
}

我试着改变这个

public carsCar car { get; set; }

为此:

public List<carsCar> car { get; set; }

但是我的 List<carsCar> 是空的。

解决方法

如果您将 xml 复制到剪贴板,然后在 Visual Studio 中转到“编辑”、“选择性粘贴”、“将 XML 粘贴为类”,它将生成正确的类结构。您可以调整这些类以获得所需的名称和数据类型。然后您的代码将起作用,r.car 将是一个汽车数组。

enter image description here

// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "",IsNullable = false)]
public partial class cars
{

    private carsCar[] carField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("car")]
    public carsCar[] car
    {
        get
        {
            return this.carField;
        }
        set
        {
            this.carField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class carsCar
{

    private string makeField;

    private string modelField;

    private string colorField;

    /// <remarks/>
    public string make
    {
        get
        {
            return this.makeField;
        }
        set
        {
            this.makeField = value;
        }
    }

    /// <remarks/>
    public string model
    {
        get
        {
            return this.modelField;
        }
        set
        {
            this.modelField = value;
        }
    }

    /// <remarks/>
    public string color
    {
        get
        {
            return this.colorField;
        }
        set
        {
            this.colorField = value;
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?