Start Debugging
2023-09-02 Обновлено 2023-11-05 dotnetdotnet-8 Edit on GitHub

.NET 8 обработка лишних членов при десериализации JSON

Узнайте, как в .NET 8 заставить десериализацию бросать исключение для несопоставленных JSON-свойств с помощью JsonUnmappedMemberHandling.

По умолчанию, если в десериализуемом JSON-пейлоаде есть дополнительные свойства, они просто игнорируются. А что если нужно, чтобы десериализация падала и бросала исключение, когда в JSON есть лишние свойства? С .NET 8 это возможно.

Включить это поведение в сериализаторе System.Text.Json можно несколькими способами.

1. Через атрибут JsonUnmappedMemberHandling

Пометьте свой тип атрибутом [System.Text.Json.Serialization.JsonUnmappedMemberHandlingAttribute], передав нужную опцию параметром.

[JsonUnmappedMemberHandling(JsonUnmappedMemberHandling.Disallow)]
public class Foo
{
     public int Bar { get; set; }
}

2. Через JsonSerializerOptions

Установите свойство JsonSerializerOptions.UnmappedMemberHandling в Disallow и передайте options в метод Deserialize.

new JsonSerializerOptions 
{ 
    UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow 
};

Бросается исключение

Будьте готовы его поймать. С JsonUnmappedMemberHandling, выставленным в Disallow, при десериализации JSON-пейлоада с дополнительными членами будет брошено следующее исключение.

System.Text.Json.JsonException: ‘The JSON property '' could not be mapped to any .NET member contained in type ’+’.’

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад