Может ли System.Text.Json допускать нераспознанный дискриминатор типов во время десериализации?C#

Место общения программистов C#
Ответить
Anonymous
 Может ли System.Text.Json допускать нераспознанный дискриминатор типов во время десериализации?

Сообщение Anonymous »

Я хотел бы быть терпимым, если полезные данные JSON содержат тип, о котором мое приложение не знает. В идеале я хотел бы получить информацию об ошибках вместе с десериализованным объектом, но как минимум мне нужно иметь возможность пройти следующий тест.

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

[JsonPolymorphic(IgnoreUnrecognizedTypeDiscriminators = true)]
[JsonDerivedType(typeof(KnownBar), nameof(KnownBar))]
interface IBar { }

class KnownBar : IBar { }

class Foo
{
public required string Hello { get; init; }
public required IBar? Bar { get; init; }
}

[TestMethod]
public void tolerate_unrecognized_discriminator()
{
var foo = JsonSerializer.Deserialize(
"""
{
"Hello": "World",
"Bar": { "$type": "unrecognized" }
}
""");

Assert.IsNotNull(foo);
Assert.AreEqual("World", foo.Hello);
Assert.IsNull(foo.Bar); // or assigning a NotImplementedBar would work too
}
Тест в том виде, в каком он написан, выдает:

System.NotSupportedException: полезные данные JSON для полиморфного интерфейса или абстрактного типа «Test1+IBar» должны указывать дискриминатор типа. Путь: $.Bar | Номер строки: 2 | BytePositionInLine: 35.


Подробнее здесь: https://stackoverflow.com/questions/798 ... g-deserial
Ответить

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

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

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

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

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