二进制 Serialization/Deserialization 与字典和其他 class 成员

Binary Serialization/Deserialization with dictionaries and others class members

我需要 serialize/deserialize 一个 class with subclasses,其中一个成员是字典。另一个成员是 class 存储密码,所以它不能是 XML 而是二进制的。 找到了一个非常好的解决方案,它可能很容易且没有问题。

http://theburningmonk.com/2010/05/net-tips-xml-serialize-or-deserialize-dictionary-in-csharp/

但是这个例子(以及我发现的所有其他例子)有一个 xml 输出,这不是我的问题的正确解决方案。

所以问题是:"how to make datacontract serialization with binary and not xml output?" 提前致谢

---添加--- 即使使用 class:

的文件流
 [DataContract]
 public class MyClass
 {
   // need a parameterless constructor for serialization
   public MyClass()
  {
    MyDictionary = new Dictionary<string, string>();
  }
  [DataMember]
  public Dictionary<string, string> MyDictionary { get; set; }
  public int aaaa = 3;
 }

正在做

  MyClass theclass = new MyClass();

  var serializer = new DataContractSerializer(typeof(MyClass));
  bool append = true;
  using (Stream fileStream = File.Open("aaa.bin", append ? FileMode.Append : FileMode.Create))
  {
    serializer.WriteObject(fileStream, theclass);
  }

输出为XML。

就像 Preston Guillot 在他的评论中提到的那样。 DataContractSerializer.WriteObject 也接受二进制编写器。为了完整起见,这里有一个例子。

MyClass theClass = new MyClass();

var serializer = new DataContractSerializer(typeof(MyClass));
bool append = true;
using (Stream fileStream = File.Open("aaa.bin", append ? FileMode.Append : FileMode.Create))
{
    XmlDictionaryWriter binaryWriter = XmlDictionaryWriter.CreateBinaryWriter(fileStream);
    serializer.WriteObject(binaryWriter, theClass);
    binaryWriter.Flush();
}