Двоичная сериализация / десериализация со словарями и другими учениками
Мне нужно сериализовать / десериализовать класс с подклассами, в которых членом является словарь. Другой член - это класс, хранящий пароли, поэтому он не может быть XML, а двоичным. Нашли это очень хорошее решение, которое может быть простым и без проблем.
http://theburningmonk.com/2010/05/net-tips-xml-serialize-or-deserialize-dictionary-in-csharp/
Но этот пример (и все остальные, которые я нашел) имеет вывод в формате xml, который не является правильным решением для моей проблемы.
Таким образом, вопрос заключается в следующем: "как сделать сериализацию данных с помощью двоичного кода, а не вывода XML?" Спасибо заранее
--- ДОБАВИТЬ --- Даже используя файловый поток с этим классом:
[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.
1 ответ
Как и Престон Гийо, уже упоминавшийся в своем комментарии. 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();
}