使用 XmlArray、XmlElement 和 XmlArrayItem 将 XML 反序列化为 List<string> 失败

Deserialize XML to List<string> failing with XmlArray, XmlElement, and XmlArrayItem

我有一个很大的对象,并且包含其他几个对象。整个事情是从 XML 文件中反序列化的。

除以下内容外,反序列化中的所有内容均正常工作:

[XmlTypeAttribute("ClientInformation")]
public class ClientInfo
{
    public ClientInfo()
    {
        ClientName = "testclient";
        ClientDisplayFullName = "testclient";
        ClientDisplayShortName = "testclient";
        ContentClientName = "";
        ContentHeirarchy = new List<string>();
    }

    /// <summary>
    /// The "ShortName" for this client (URL Friendly)
    /// </summary>
    public string ClientName { get; set; }

    /// <summary>
    /// This is used to determine what content path to use for content.
    /// normally the same as the ClientName.
    /// </summary>
    public string ContentClientName { get; set; }

    public List<string> ContentHierarchy { get; set; }

    public string ClientDisplayFullName { get; set; }

    public string ClientDisplayShortName { get; set; }

}

问题出在 'ContentHierarchy'。 XML的相关部分如下:

<ClientInformation>
    <ClientName>ABC</ClientName>
    <ContentClientName>ABC</ContentClientName>
    <ClientDisplayFullName>ABC&amp;D</ClientDisplayFullName>
    <ClientDisplayShortName>ABC&amp;D</ClientDisplayShortName>
    <ContentHierarchy>
        <Content>XYZB</Content>
        <Content>Base</Content>
    </ContentHierarchy>
</ClientInformation>

此对象的所有非列表部分都正确反序列化。

我想弄清楚我需要在 ContentHierarchy 的 属性 声明之上使用什么来让反序列化器使用 XML 文件中的 ContentHierarchy\Content 项填充它.

我试过使用 XmlArray()XmlArray(ContentHierarchy)XmlElement(Content)XmlElement(ContentHierarchy)XmlArrayItem(Content) 以及以上的各种组合。

每次 List<string> 的计数都为 0。

我做错了什么?

尝试将属性 [System.Xml.Serialization.XmlArrayItemAttribute("Content", IsNullable = false)] 置于 ContentHierarchy 属性 之上。在 class 构造函数中,属性 名称是 ContentHeirarchy,请检查您 属性 是否也具有名称 ContentHeirarchy(错误)或 ContentHierarchy(正确)。

我的完整代码:

    [XmlTypeAttribute("ClientInformation")]
public class ClientInfo
{
    public ClientInfo()
    {
        ClientName = "testclient";
        ClientDisplayFullName = "testclient";
        ClientDisplayShortName = "testclient";
        ContentClientName = "";
        ContentHierarchy = new List<string>();
    }

    /// <summary>
    /// The "ShortName" for this client (URL Friendly)
    /// </summary>
    public string ClientName { get; set; }

    /// <summary>
    /// This is used to determine what content path to use for content.
    /// normally the same as the ClientName.
    /// </summary>
    public string ContentClientName { get; set; }

    [System.Xml.Serialization.XmlArrayItemAttribute("Content", IsNullable = false)]
    public List<string> ContentHierarchy { get; set; }

    public string ClientDisplayFullName { get; set; }

    public string ClientDisplayShortName { get; set; }

}

class Program
{
    static void Main(string[] args)
    {
        string xml = "<ClientInformation>    <ClientName>ABC</ClientName>    <ContentClientName>ABC</ContentClientName>    <ClientDisplayFullName>ABC&amp;D</ClientDisplayFullName>    <ClientDisplayShortName>ABC&amp;D</ClientDisplayShortName>    <ContentHierarchy>        <Content>XYZB</Content>        <Content>Base</Content>    </ContentHierarchy></ClientInformation>";
        var xmlSerializer = new XmlSerializer(typeof(ClientInfo));
        var a = xmlSerializer.Deserialize(new MemoryStream(UTF8Encoding.Default.GetBytes(xml)));
    }

}