Udostępnij za pośrednictwem


Obsługa brakujących elementów członkowskich podczas deserializacji

Domyślnie, jeśli ładunek JSON, który deserializujesz, zawiera właściwości, które nie istnieją w deserializacji zwykły stary obiekt CLR (POCO), są po prostu ignorowane. Począwszy od platformy .NET 8, można określić, że wszystkie elementy członkowskie muszą znajdować się w ładunku. Jeśli tak nie jest, JsonException zostanie zgłoszony wyjątek. To zachowanie można skonfigurować na jeden z trzech sposobów:

  • Dodaj adnotację do typu POCO za pomocą atrybutu JsonUnmappedMemberHandlingAttribute , określając element do Skip lub Disallow brakujących elementów członkowskich.

    [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'.
    
  • Ustaw JsonSerializerOptions.UnmappedMemberHandling wartość lub Skip Disallow.

  • JsonTypeInfo Dostosuj kontrakt dla odpowiedniego typu. (Aby uzyskać informacje na temat dostosowywania kontraktu, zobacz Dostosowywanie kontraktu JSON.