如何序列化 XMLNode 类型的属性
Posted
技术标签:
【中文标题】如何序列化 XMLNode 类型的属性【英文标题】:How to serialize a property of type XMLNode 【发布时间】:2014-08-30 06:50:15 【问题描述】:我有一个公共类,其属性如下:
[serializable]
public class Data
Public XmlNode VariableXMLData get; set;
VariableXMLData 节点又包含一个 xml 节点。例如,说:
VariableXMLData.OuterXML is "
<VariableXMLData>
<Change>Major</Change><Reason>Unknown</Reason>
</VariableXMLData> ".
问题是:当我序列化这个类时,输出如下:
<Data>
<VariableXMLData>
<VariableXMLData>
<Change>Major</Change><Reason>Unknown</Reason>
</VariableXMLData>
</VariableXMLData>
</Data>
我怎样才能避免这里的元素名称有多个标签。我只想为<VariableXMLData>
提供一个节点
【问题讨论】:
不会在另一边正确反序列化,然后简单地把你的xml节点放在里面吗? 不,问题是 - 它不会总是反序列化的属性。它可以是任何东西。基本上传入 xml 的协议是:它应该用根节点包装为我会选择这样的:
[serializable]
public class Data
[XmlIgnore]
Public XmlNode VariableXMLData get; set;
[XmlElement(ElementName="VariableXMLData")]
Public XmlNode VariableXMLDataParts
get
//handle the deserialization => returning the nodes you wish to return
// example only return the roots descendants...
set
// handle your serialization if needed
不确定,但我认为您可以将第二种方法放在内部或受保护,因此它不会显示给其他程序集
【讨论】:
感谢塞德里克!只是想重申你的建议,以确保我理解正确。在“VariableXMLDataParts”的获取部分,我是否返回子节点?考虑我的例子,它应该返回节点 "以上是关于如何序列化 XMLNode 类型的属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中序列化时删除列表类型属性名称以及 和 [] 括号