Хорошо, если у меня есть класс, как это ...Serialize «это»
[serializable]
public class MyClass() : ISerializable
{
public Dictionary<string, object> Values {get; set;}
}
Я знаю, что я должен сделать, чтобы сериализовать (ответ для тех, кто пытается найти быстрый ответ, является это) ...
protected MyClass(SerializationInfo info, StreamingContext context)
{
Values = (Dictionary<string, object>)info.GetValue("values", typeof(Dictionary<string, object>));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("values", Values);
}
Мой вопрос: что делать, если, вместо этого, я хотел определенного класса, унаследованного от словаря?
Я получаю это далеко ...
[serializable]
public class MyClass() : Dictionary<string, object>, ISerializable
{
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("me", this);
}
}
но потом заблудились. Я не могу это написать ...
protected MyClass(SerializationInfo info, StreamingContext context)
{
this = (MyClass)info.GetValue("me", typeof(MyClass));
}
'cos' это 'r/o. Итак, как я могу продолжить? Я даже прав о реализации GetObjectData()?
Я не считаю, что это будет иметь значение, но только в случае, если это произойдет, я пишу это под .Net 4.0
Почему вы внедряете 'ISerializable' вообще? Сериализация по умолчанию работает почти для всех и% 90 из реализаций ISerializable, которые я когда-либо видел, от людей, которые еще этого не осознали. – Yaur
@Yaur a: ** требуется ** при наследовании от чего-то вроде словаря (хотя я бы утверждал, что инкапсуляция - лучшая идея); что сказал: b: лично я стараюсь не слишком рекомендовать BinaryFormatter - у него есть ... Kinks. –
@Yaur. Если я этого не сделаю, я получу исключение, как только попытаюсь десериализовать экземпляр класса. I/have/для реализации ISerializable, если я использую словарь в своем классе. –