Поделиться через


Обработка отсутствующих элементов во время десериализации

По умолчанию, если полезные данные JSON, которые вы десериализируете, содержат свойства, которые не существуют в типе десериализированного обычного обычного объекта CLR (POCO), они просто игнорируются. Начиная с .NET 8, можно указать, что все члены должны присутствовать в полезных данных. Если это не так, JsonException создается исключение. Это поведение можно настроить одним из трех способов:

  • Заметьте тип POCO с атрибутом [<xref:System.Text.Json.Serialization.JsonUnmappedMemberHandlingAttribute>] , указывая либо SkipDisallow отсутствующие элементы, либо отсутствующие элементы.

    [JsonUnmappedMemberHandling(JsonUnmappedMemberHandling.Disallow)]
    public class MyPoco
    {
         public int Id { get; set; }
    }
    
    JsonSerializer.Deserialize<MyPoco>("""{"Id" : 42, "AnotherId" : -1 }"""); 
    // JsonException : The JSON property 'AnotherId' could not be mapped to any .NET member contained in type 'MyPoco'.
    
  • Задайте для параметра JsonSerializerOptions.UnmappedMemberHandling значение Skip или Disallow.

  • JsonTypeInfo Настройте контракт для соответствующего типа. (Сведения о настройке контракта см. в разделе Настройка контракта JSON.)