二进制 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();
}
我需要 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();
}