Двоичная сериализация / десериализация со словарями и другими учениками

Мне нужно сериализовать / десериализовать класс с подклассами, в которых членом является словарь. Другой член - это класс, хранящий пароли, поэтому он не может быть 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();
}
Другие вопросы по тегам