将对象二进制序列化反序列化为XML?

时间:2013-02-14 10:15:46

标签: c# xml deserialization xmlserializer binaryformatter

我在将对象反序列化为XML时遇到了一些麻烦。我试图反序列化没有空构造函数的东西,因此我需要使用BinaryFormatter?我有:

  • 一个DLL,它由我想要反序列化为XML的类组成。
  • 从反映类型我可以看出它没有无参数构造函数。
  • 此类包含一些属性,其中一些属性也没有空构造函数。

我的问题是,是否可以将此类反序列化为XML?我确实找到了一种方法:

  • 的BinaryFormatter
  • 将内容加载到流中
  • 使用FileStream编写其内容但最终以垃圾
  • 结束

提前致谢。我找到了一个名为FormatterServices的东西......但是不知道你是否可以将它与XmlSerializer结合使用?

1 个答案:

答案 0 :(得分:0)

  1. 将二进制数据反序列化为对象。

  2. 将对象复制到代理对象中。

  3. Xml序列化您的代理对象。

  4. 假设原始非xml可序列化对象的类型为“Foo”

    [XmlRoot]
    public class FooSurrogate {
    
         public FooSurrogate() { }; // note the empty constructor for xml deserialization
    
         public FooSurrogate(Foo foo) {  // this constructor is used in step 2
              // in here you copy foo's state into this object's state
              this.Prop1 = foo.Prop1; // this prop can be copied directly 
              this.Bar = new BarSurrogate(foo.Bar); // this prop needs a surrogate as well  
         } 
    
         [XmlAttribute]  // note your surrogate can be used to xml-format too!
         public string Prop1 { get; set; }
    
         [XmlElement]
         public BarSurrogate Bar { get; set; }
    
    }
    
    public class BarSurrogate { 
    ...
    }