Deserialization типы интерфейса в C#, спроектированные на записяхC#

Место общения программистов C#
Ответить
Anonymous
 Deserialization типы интерфейса в C#, спроектированные на записях

Сообщение Anonymous »

Я десериализации интерфейсов, отображаемых на классах rasual с пользовательскими ijsontypeinforesolver . Резольвер выглядит похоже на это: < /p>

Код: Выделить всё

public class InterfaceMappingResolver : IJsonTypeInfoResolver
{
private readonly IJsonTypeInfoResolver _default = new DefaultJsonTypeInfoResolver();

private static readonly Dictionary _map = new()
{
{ typeof(IClass), typeof(ClassImplementation) }
};

public JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions options)
{
var result = _default.GetTypeInfo(type, options);

if (_map.TryGetValue(type, out var impl))
{ result.CreateObject = () => Activator.CreateInstance(impl); }

return result;
}
}
< /code>
Но с типами, зарегистрированными через DI, экземпляр создается DI и т. Д. I tried to fool the TypeInfoResolver by just returning result = _default.GetTypeInfo(impl, options)
but this would throw an exception

System.InvalidOperationException: 'The IJsonTypeInfoResolver returned an incompatible JsonTypeInfo instance of type 'ClassImplementation', ожидаемый тип 'Iclass'. '< /P>
< /blockquote>
Есть идеи, как это добиться с помощью записей? Или я, наверное, здесь проиграл?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... on-records
Ответить

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

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

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

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

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