字典和其他类成员的二进制序列化/反序列化

本文关键字:二进制 序列化 反序列化 成员 其他 字典 | 更新日期: 2023-09-27 18:27:27

我需要用子类序列化/反序列化一个类,其中一个成员是字典。另一个成员是一个存储密码的类,所以它不能是XML而是二进制的。已经找到了一个非常好的解决方案,它可能很简单,而且没有问题。

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

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

所以问题是:"如何使用二进制而不是xml输出进行数据契约序列化?"提前Thanx

---添加---即使使用该类的文件流:

 [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();
}