Выполняя DeSerialise с использованием BinaryFormatter, я обнаруживаю, что получаю правильный тип объекта.
Как BinaryFormatter сохраняет нужный объект, даже если объект унаследован от другого объекта? Как создать нужный объект в DeSerialise?
Пример :
[Serializable]
public class Class1
{
public string Id { get; set; }
public int Age { get; set; }
}
[Serializable]
public class Class2 : Class1
{
public string Id1 { get; set; }
public int Age1 { get; set; }
}
BinaryFormatter bf = new BinaryFormatter();
Class1 c1 = new Class1();
Class2 c2 = new Class2();
byte[] c1Bytes;
byte[] c2Bytes;
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, c2);
c2Bytes = ms.GetBuffer();
}
using (MemoryStream ms = new MemoryStream(c2Bytes))
{
var t = bf.Deserialize(ms);
string rr = t.ToString(); // rr contain "Class2"
}
2 ответа
Поскольку BinaryFormatter
хранит информацию о типе в сериализованных данных. Вы можете проверить спецификацию формата здесь
Проверьте содержимое байтов c2 (используйте средство просмотра памяти Visual Studio для переменной c2 bytes) и Google .net reflection
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.