XmlArrayItem反序列化为空List

时间:2014-08-20 00:03:36

标签: c# xml-serialization

当我反序列化一个与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

1 个答案:

答案 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();
}