Сериализация подтипа MessagePackC#

Место общения программистов C#
Ответить
Anonymous
 Сериализация подтипа MessagePack

Сообщение Anonymous »

Сериализация/десериализация превращает коллекцию базового типа с элементами дочернего типа в коллекцию, содержащую только элементы базового типа.
Есть ли способ настроить процесс так, чтобы элементы в конечном итоге оказывались одного и того же типа? Пробовал разные резолверы, безрезультатно. Также следует отметить, что опция атрибута, использующая Union - [MessagePack.Union(0, typeof(Child))] не подходит, поскольку иногда невозможно сохранить типы абстрактными/интерфейсными.
В следующем примере три объекта типов Child, AnotherChild сериализуются, а затем десериализуются в три объекта базового типа.
var cache = new ItemCache
{
Items = new List
{
new Child { BaseProperty = 1, ChildProperty = 0},
new AnotherChild { BaseProperty = 2, AnotherChildProperty = 1},
new AnotherChild { BaseProperty = 3, AnotherChildProperty = 2}
}
};

var serializedData = MessagePackSerializer.Serialize(cache);
var deserializedData = MessagePackSerializer.Deserialize(serializedData);

[MessagePackObject]
public class ItemCache
{
[Key(0)] public List Items { get; set; }
}

[MessagePackObject]
public class Base
{
[Key(1)] public int BaseProperty { get; set; }
}

[MessagePackObject]
public class Child : Base
{
[Key(2)] public int ChildProperty { get; set; }
}

[MessagePackObject]
public class AnotherChild : Base
{
[Key(2)] public int AnotherChildProperty { get; set; }
}


Подробнее здесь: https://stackoverflow.com/questions/709 ... ialization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»