[英]Deserializing XML into a C# Objects
我有以下 XML 架构,我试图将其反序列化为 C# 对象:
<TMMAI>
<StringReturn>123456789</StringReturn>
<VectorReturn>
<VectorElement>test1</VectorElement>
<VectorElement>test2</VectorElement>
<VectorElement>test3</VectorElement>
<VectorElement>test4</VectorElement>
<VectorElement>test5</VectorElement>
<VectorElement>test6</VectorElement>
<VectorElement>test7</VectorElement>
</VectorReturn>
</TMMAI>
和我想反序列化的 C# 对象(从https://xmltocsharp.azurewebsites.net/生成,但粘贴在上面的 Z3501BB093D363810B671059B9CFED3 模式中):
[XmlRoot(ElementName = "VectorReturn")]
public class VectorReturn
{
[XmlElement(ElementName = "VectorElement")]
public List<string> VectorElement { get; set; }
}
[XmlRoot(ElementName = "TMMAI")]
public class TMMAI
{
[XmlElement(ElementName = "VectorReturn")]
public VectorReturn VectorReturn { get; set; }
[XmlElement(ElementName= "StringReturn")]
public string StringReturn { get; set; }
}
启动并使用默认 XmlDeserializer 后, VectorElement
的长度为 0,其中没有数据。
我还尝试创建自己的 object 层次结构,如下所示,而不是使用生成工具:
[XmlRoot("TMMAI")]
public class TMMAI
{
[XmlElement("StringReturn")]
public string StringReturn { get; set; }
[XmlElement("VectorReturn")]
public VectorReturn VectorReturn { get; set; }
}
public class VectorReturn
{
[XmlElement("VectorElement")]
public List<VectorElement> VectorElements { get; set; }
}
public class VectorElement
{
public string Element { get; set; }
}
这让我更接近 - VectorElements
的大小为 7,这是测试 XML 中<VectorElement>
项目的正确数量,但每个 VectorElement.Element 的值是null
。
我很接近,但我现在无法判断出了什么问题。 一个错误的属性? object 设计不正确? 需要使用 XmlArray 属性吗?
Visual Studio 2015 或更高版本具有内置 XML 到 class 转换器。 它可能比序列化/反序列化更有优势。转到编辑 -> 过去的特殊 -> XML 到类。
下面是使用 VS2019 生成的 class -
// 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 TMMAI
{
private uint stringReturnField;
private string[] vectorReturnField;
// Default constructor
public TMMAI() {}
/// <remarks/>
public uint StringReturn
{
get
{
return this.stringReturnField;
}
set
{
this.stringReturnField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("VectorElement", IsNullable = false)]
public string[] VectorReturn
{
get
{
return this.vectorReturnField;
}
set
{
this.vectorReturnField = value;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.