C# 自定义xml序列化
我需要帮助,我有一些xml格式的数据,我想用它创建一个对象,对它做一些事情,将它序列化并发送出去。。。 但它必须是某种自定义序列化 类似xml的:C# 自定义xml序列化,c#,.net,xml,C#,.net,Xml,我需要帮助,我有一些xml格式的数据,我想用它创建一个对象,对它做一些事情,将它序列化并发送出去。。。 但它必须是某种自定义序列化 类似xml的: <Animals Ver="12" class="1" something="2"> <Dog Ver="12" class="2" something="17"> <Name> a </Name> <Sound> oof </Sound>
<Animals Ver="12" class="1" something="2">
<Dog Ver="12" class="2" something="17">
<Name> a </Name>
<Sound> oof </Sound>
<SomeOtherProp>12</SomeOtherProp>
</Dog>
<Cat Ver="12" class="3" something="4">
<Name> b </Name>
<Sound> meow </Sound>
</Cat>
</Animals>
您所追求的
XmlMagic
被称为IXmlSerializable
接口:
它提供了两种方法ReadXml
和WriteXml
,在这两种方法中,您必须实现读取对象并将其写回。然后使用标准的.NetXmlSerializer
对对象进行序列化/反序列化
如果您需要更多帮助,请告诉我。但是还有XML序列化属性,如
[XmlAttribute]
[XmlArrayElement]
[XmlRoot]
等等,您甚至可以使用这些属性来控制您的序列化并实现您想要的,而无需编写复杂的序列化逻辑。您可能需要查看WCF REST初学者工具包;因为它包含一个名为“将XML粘贴为类型”的visual studio外接程序 基本上,复制原始XML,然后选择该选项;它将根据XML为您生成一个类。然后你可以做一些简单的事情,比如:
var xmlResponse = new XmlDocument();
xmlResponse.LoadXml(response);
var deserializedResponse = ConvertNode<ResponseWrapper.response>(xmlresponse);
public static T ConvertNode<T>(XmlNode node) where T : class
{
var stm = new MemoryStream();
var stw = new StreamWriter(stm);
stw.Write(node.OuterXml);
stw.Flush();
stm.Position = 0;
var ser = new XmlSerializer(typeof(T));
var result = (ser.Deserialize(stm) as T);
return result;
}
var xmlResponse=new XmlDocument();
LoadXml(响应);
var反序列化响应=ConvertNode(xmlresponse);
公共静态T ConvertNode(XmlNode节点),其中T:class
{
var stm=新内存流();
var stw=新的StreamWriter(stm);
Write(node.OuterXml);
stw.Flush();
stm.Position=0;
var ser=新的XmlSerializer(typeof(T));
var result=(序列反序列化(stm)为T);
返回结果;
}
var xmlResponse = new XmlDocument();
xmlResponse.LoadXml(response);
var deserializedResponse = ConvertNode<ResponseWrapper.response>(xmlresponse);
public static T ConvertNode<T>(XmlNode node) where T : class
{
var stm = new MemoryStream();
var stw = new StreamWriter(stm);
stw.Write(node.OuterXml);
stw.Flush();
stm.Position = 0;
var ser = new XmlSerializer(typeof(T));
var result = (ser.Deserialize(stm) as T);
return result;
}