【发布时间】:2016-10-11 11:40:00
【问题描述】:
我正在尝试反序列化一个 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Foos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FooList>
<Foo>
<Bar>bar value</Bar>
<Stack />
</Foo>
<Foo>
<Bar>bar value</Bar>
<Stack><![CDATA[This is some cdata, where <br> html code is left as is..]]></Stack>
</Foo>
</FooList>
</Foos>
进入下面的类
[XmlRoot("Foos")]
public class Foos
{
[XmlArray("FooList")]
[XmlArrayItem("Foo")]
public List<Foo> FooList { get; set; }
}
public class Foo
{
public string Bar { get; set; }
[XmlElement("Stack", typeof(XmlCDataSection))]
public XmlCDataSection Stack {get; set; }
}
问题是,Foos 的结果 FooList 仅包含一 (1) 个元素,即第一个 Foo 块,Slack 属性设置为 null。如果我将 CDATA 值添加到 stack,就像第二个 Foo 块一样,那么我最终会得到两个元素的列表。
由于某种原因,反序列化在达到为空的 CDATA 值后停止。
我尝试创建一个私有字符串并创建Stack 的setter 和getter,这样就使用私有属性来存储CDATA 字符串。这不会改变任何事情。
有什么建议吗?
谢谢。
【问题讨论】:
-
为什么
Stack必须是XmlCDataSection而不仅仅是string?元素数据恰好是 CDATA 转义标记是表示的细节。如果它显示为<Stack>This is some cdata, where &lt;br&gt; html code is left as is...</Stack>,您会因为它不是 CDATA 而拒绝它吗? (另外,这是关于de序列化,而不是序列化。) -
关于反序列化,那么你是完全正确的。我已经改变了问题中的措辞。关于 CDATA 条目的问题是,我无法更改数据和/或格式。我必须按原样反序列化数据。
-
只使用
public string Stack { get; set; },不带任何属性。