【发布时间】:2017-10-30 20:37:05
【问题描述】:
我在反序列化来自 API 调用的 XML 响应时遇到问题。我的“选项”对象的属性“描述”为空。
以下是 XML 示例:
<vehicle found="1">
<description>VehicleDescText</description>
<buildDate>2000-11-20</buildDate>
<modelYear>2001</modelYear>
<optionList>
<option code="UH8">OptionDesc1</option>
<option code="UH8">OptionDesc2</option>
</optionList>
</vehicle>
这是一个 C# 类的示例:
[DataContract]
[XmlRoot("vehicle")]
public class Vehicle
{
[DataMember]
[XmlAttribute("found")]
public bool Found { get; set; }
[DataMember]
[XmlElement("description")]
public string Description { get; set; }
[DataMember]
[XmlElement("buildDate")]
public string BuildDate { get; set; }
[DataMember]
[XmlElement("modelYear")]
public string ModelYear { get; set; }
[DataMember]
[XmlElement("optionList")]
public List<Option> OptionList { get; set; }
}
public class Option
{
[DataMember]
[XmlAttribute("code")]
public string Code { get; set; }
[DataMember]
[XmlElement("option")]
public string Description { get; set; }
}
反序列化对象如下所示:
var xmlDeserializer = new RestSharp.Deserializers.XmlDeserializer();
results = xmlDeserializer.Deserialize<Vehicle>(response);
我哪里错了?由于我不想修改底层数据模型,我可以添加或修改哪些属性来解决问题?
【问题讨论】:
-
您提供的 XML 示例具有用于 root 的 Vehicle,而不是 ResponseResult。你不应该调用 Deserialize
吗? -
@GabrielRainha 我无法为 Vehicle 创建包装类?
-
什么是
XmlDeserializer?它使用XmlSerializer还是DataContractSerializer?你能提供一个minimal reproducible example我们可以编译、运行和测试吗? -
RestSharp.Deserializers.XmlDeserializer不使用数据协定属性或XmlSerializer属性。它有自己的。见github.com/restsharp/RestSharp/wiki/Deserialization。也许您想改用DotNetXmlDeserializer? -
您可以尝试使用 [XmlText] 而不是 [XmlElement("option")] 吗?见stackoverflow.com/questions/14245846/…
标签: c# xml deserialization restsharp