Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义xml序列化_C#_.net_Xml - Fatal编程技术网

C# 自定义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>

我需要帮助,我有一些xml格式的数据,我想用它创建一个对象,对它做一些事情,将它序列化并发送出去。。。 但它必须是某种自定义序列化

类似xml的:

<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
,在这两种方法中,您必须实现读取对象并将其写回。然后使用标准的.Net
XmlSerializer
对对象进行序列化/反序列化


如果您需要更多帮助,请告诉我。

但是还有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;
        }