【发布时间】:2018-04-07 16:25:56
【问题描述】:
我正在将自定义的不灵活 XML 模式反序列化为 C# 对象,以遍历和迁移其中的数据。
一个简单的例子:
<Source>
...
<Provider>
<![CDATA[read 1]]>
<Identifier><![CDATA[read 2]]></Identifier>
<IdentificationScheme><![CDATA[read 3]]></IdentificationScheme>
</Provider>
...
</Source>
我正在使用第一个 CDATA 元素值 read 1 反序列化 Provider 元素,它也是同级元素值 read 2 和 read 3。
使用http://xmltocsharp.azurewebsites.net/ 会产生以下对象:
[XmlRoot(ElementName = "Provider")]
public class Provider
{
[XmlElement(ElementName = "Identifier")]
public string Identifier { get; set; }
[XmlElement(ElementName = "IdentificationScheme")]
public string IdentificationScheme { get; set; }
}
[XmlRoot(ElementName = "Source")]
public class Source
{
[XmlElement(ElementName = "Provider")]
public Provider Provider { get; set; }
}
但它没有考虑 CDATA 值,事实上我认为像这样反序列化它的值是无法达到的。
我认为这也可能与要使用的 XmlDeserializer 有关,我计划使用 RestSpharp(因为它已经是网站的库)或 System.Xml.Link.XDocument,但我不确定是否可以处理这种情况?
在我的搜索中,我也找不到示例,但堆栈确实建议了这个 <!{CDATA[]]> and <ELEMENT> in a xml element,这正是相同的架构选项。
非常感谢您提前提供的任何帮助,
编辑 1
据我所知,[XmlText] 是所需的解决方案,正如下面 Marc Gravell 的回答中所指出的那样,但它不起作用/在 RestSharp 的 XmlDeserializer 上实现,但需要进一步测试以确定这一点。
【问题讨论】:
标签: c# traversal cdata xml-deserialization