Я пытаюсь де / сериализовать объекты из / в байтовые массивы, где я не имею никакого контроля над сериализуемыми объектами, поскольку это библиотека.
Код: (https://github.com/jonathansant/Orleans.Persistence.Redis/blob/master/Orleans.Persistence.Redis/Serialization/MessagePackSerializer.cs)
В вставленном репо выше я использую пространство имен Typeless, которое отлично работает для классов, находящихся в одной сборке. Однако произойдет сбой с объектом, созданным во внешней сборке.
Я пытался использовать распознаватель без контрактов:
public byte[] Serialize(object raw, Type type)
=> MessagePack.MessagePackSerializer.NonGeneric.Serialize(
type,
raw,
ContractlessStandardResolver.Instance
);
public object Deserialize(byte[] serializedData, Type type)
=> MessagePack.MessagePackSerializer.NonGeneric.Deserialize(
type,
serializedData,
ContractlessStandardResolver.Instance
);
который бросает:
System.TypeLoadException: Type 'MessagePack.Formatters.Orleans_GrainState`1\[\[Orleans_Persistence_Redis_E2E_MockState\, Orleans_Persistence_Redis_E2E\]\]Formatter1' from assembly 'MessagePack.Resolvers.DynamicContractlessObjectResolver, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is attempting to implement an inaccessible interface.
Есть идеи, как мне этого добиться?