【发布时间】:2016-11-15 23:29:41
【问题描述】:
我有以下 XML:
<MyType>
<MyProperty1>Value 1</MyProperty1>
<MyProperty2>Value 2</MyProperty2>
<MyNestedXml>
<h1>Heading</h1>
<p>Lorum</p>
<p>Ipsum</p>
</MyNestedXml>
</MyType>
这可以通过创建类和添加属性在 C# 中反序列化为 XML,如下所示:
[Serializable]
public class MyType
{
[XmlElement("MyProperty1")
public string MyProperty1 { get; set; }
[XmlElement("MyProperty2")
public string MyProperty2 { get; set; }
[XmlIgnore]
public string MyNestedXml { get; set; }
}
但是,<MyNestedXml> 元素中的内部 XML 会有所不同,并且不遵循我可以使用属性有效映射的一致结构。
很遗憾,我无法控制 XML 结构。
我尝试使用具有 XmlNode 类型的 [XmlElement("MyNestedXml") 但这会导致第一个子节点被反序列化,而不是整个内部 XML。
我也尝试过反序列化为一种字符串,但会引发 InvalidOperationException:
“非预期的节点类型元素。ReadElementString 方法只能在内容简单或为空的元素上调用。”
问题在于 MyNestedXml 元素的内容有时可能是 Elements 数组,但有时可能是简单或空内容。
理想情况下,我可以使用不同的序列化属性(例如 [XmlAsString])来完全跳过序列化并按原样分配内部 XML。
预期的结果将是一个 MyType 类型的类,它具有属性 MyProperty1 = "Value 1"、属性 MyProperty2 = "Value 2" 和属性 MyNestedXml = "<h1>Heading</h1><p>Lorum</p><p>Ipsum</p>"。
【问题讨论】:
标签: c# xml serialization