使用 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&D</ClientDisplayFullName>
<ClientDisplayShortName>ABC&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&D</ClientDisplayFullName> <ClientDisplayShortName>ABC&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)));
}
}
我有一个很大的对象,并且包含其他几个对象。整个事情是从 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&D</ClientDisplayFullName>
<ClientDisplayShortName>ABC&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&D</ClientDisplayFullName> <ClientDisplayShortName>ABC&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)));
}
}