自定义XML序列化

4

我需要帮助,我有一些以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>

需要呈现为:

abstract class Animal :XmlMagic
{
  public string Name{get;set;}
  public string Sound{get;set;}

  public void SomeMagicalXMLSerializationMethod()
  {}
  public void SomeMagicalXMLDeSerializationMethod()
  {}
}

class Dog: Animal, XmlMagic
{
  public int SomeOtherProp{get;set;}
  public void SomeMagicalXMLSerializationMethod()
  {}
  public void SomeMagicalXMLDeSerializationMethod()
  {}
}
3个回答

7

4
然而,还有一些XML序列化属性,例如:
[XmlAttribute]
[XmlArrayElement]
[XmlRoot]

等等,你甚至可以使用这些属性来控制序列化并实现你想要的内容,而不需要编写复杂的序列化逻辑。


0
你可能想要查看WCF REST Starter Kit;因为它包括一个名为“Paste XML as Type”的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;
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接