当我反序列化一个与XML协调一致的List时,我得到空列表。
我从我的对象GJurisdictions开始,并将其序列化为XML
<open511 xml:lang="en" xml:base="http://api.open511.info/" version="v0">
<jurisdictions>
<jurisdiction>
<id>my.id</id>
<languages>
<language>en</language>
</languages>
</jurisdiction>
</jurisdictions>
</open511>
这正是我想要的,但是当我尝试用语言读回来时,它是空的。
public class Jurisdiction
{
[XmlElement("id")]
[JsonProperty("id")]
public string Id { get; set; }
[XmlArray("languages")]
[XmlArrayItem("language")]
[JsonProperty("languages")]
public List<String> Languages { get; set; }
}
[XmlRoot("open511")]
public class JurisdictionsBase : Open511Base
{
private List<Jurisdiction> _jurisdictions;
[XmlArray("jurisdictions")]
[XmlArrayItem("jurisdiction")]
[JsonProperty("jurisdiction")]
public List<Jurisdiction> Jurisdictions
{
get { return _jurisdictions ?? (_jurisdictions = new List<Jurisdiction>()); }
set { _jurisdictions = value; }
}
}
司法管辖区列表完美序列化,所有其他属性(我为了清晰起见而编辑)完全序列化,但语言列表始终为空,为什么?
规格:http://open511.org/jurisdiction.html 完整代码:https://github.com/doublej42/Open511DotNet/blob/master/Open511DotNet/Jurisdiction.cs
答案 0 :(得分:0)
所以在没有阅读完整源代码的情况下,我没有提供足够的信息。我的问题是,在我项目的其他地方,我使用了http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.readxml(v=vs.110).aspx
中的一些示例代码public void ReadXml (XmlReader reader)
{
personName = reader.ReadString();
}
请勿使用上述代码 它没有正确地向前移动读者。 正如这里提到的http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(System.Xml.XmlReader.ReadString);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5.1);k(DevLang-csharp)&rd=true
public void ReadXml(System.Xml.XmlReader reader)
{
_unit = reader.ReadElementContentAsString();
}