如何解决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
将是一个汽车数组。
// 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 举报,一经查实,本站将立刻删除。