Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Seri durumdan çıkarmanın başarılı olması için JSON yükünde bulunmaları gerektiğini göstermek için belirli özellikleri işaretleyebilirsiniz. Benzer şekilde, isteğe bağlı olmayan tüm oluşturucu parametrelerinin JSON yükünde mevcut olduğunu belirtmek için bir seçenek ayarlayabilirsiniz. Bu gerekli özelliklerden biri veya daha fazlası yoksa, JsonSerializer.Deserialize yöntemler bir JsonExceptionoluşturur.
JSON deseriyalizasyonu için bir özelliği veya alanı zorunlu olarak işaretlemenin üç yolu vardır.
- Değiştiriciyi
requiredekleyerek. - "JsonRequiredAttribute ile açıklama ekleyerek."
- Sözleşme modelinin JsonPropertyInfo.IsRequired özelliğini değiştirerek.
JSON seri durumdan çıkarma için tüm zorunlu oluşturucu parametrelerinin gerekli olduğunu belirtmek amacıyla JsonSerializerOptions.RespectRequiredConstructorParameters seçeneğini (veya kaynak oluşturma için RespectRequiredConstructorParameters özelliğini) true olarak ayarlayın. Daha fazla bilgi için İsteğe bağlı olmayan oluşturucu parametreleri bölümüne bakın.
Seri hale getiricinin perspektifinden, C# required değiştiricisi ve [JsonRequired] özniteliği eşdeğerdir ve her ikisi de aynı meta veri parçası olan ile eşlenir JsonPropertyInfo.IsRequired. Çoğu durumda, yerleşik C# anahtar sözcüğünü kullanmanız yeterlidir. Ancak, aşağıdaki durumlarda bunun yerine kullanmanız JsonRequiredAttribute gerekir:
- C# dışında bir programlama dili veya C# 'nin alt düzey bir sürümünü kullanıyorsanız.
- Gereksinimin yalnızca JSON seri durumdan çıkarma işlemine uygulanmasını istiyorsanız.
- Eğer
System.Text.Jsonserileştirmeyi kaynak oluşturma modunda kullanıyorsanız. Bu durumda, kaynak oluşturma işlemi derleme zamanında gerçekleştiğinden değiştiriciyirequiredkullanırsanız kodunuz derlenmez.
Aşağıdaki kod parçacığında anahtar sözcüğüyle değiştirilen bir özellik örneği gösterilmektedir required . Seri durumdan çıkarmanın başarılı olması için bu özelliğin JSON yükünde mevcut olması gerekir.
public static void RunIt()
{
// The following line throws a JsonException at run time.
Console.WriteLine(JsonSerializer.Deserialize<Person>("""{"Age": 42}"""));
}
public class Person
{
public required string Name { get; set; }
public int Age { get; set; }
}
Alternatif olarak, kullanabilirsiniz JsonRequiredAttribute:
public static void RunIt()
{
// The following line throws a JsonException at run time.
Console.WriteLine(JsonSerializer.Deserialize<Person>("""{"Age": 42}"""));
}
public class Person
{
[JsonRequired]
public string Name { get; set; }
public int Age { get; set; }
}
Ayrıca, özelliğini kullanarak JsonPropertyInfo.IsRequired sözleşme modeli aracılığıyla bir özelliğin gerekli olup olmadığını denetlemek de mümkündür:
public static void RunIt()
{
var options = new JsonSerializerOptions
{
TypeInfoResolver = new DefaultJsonTypeInfoResolver
{
Modifiers =
{
static typeInfo =>
{
if (typeInfo.Kind != JsonTypeInfoKind.Object)
return;
foreach (JsonPropertyInfo propertyInfo in typeInfo.Properties)
{
// Strip IsRequired constraint from every property.
propertyInfo.IsRequired = false;
}
}
}
}
};
// Deserialization succeeds even though
// the Name property isn't in the JSON payload.
JsonSerializer.Deserialize<Person>("""{"Age": 42}""", options);
}
public class Person
{
public required string Name { get; set; }
public int Age { get; set; }
}
İsteğe bağlı olmayan oluşturucu parametreleri
.NET 9'dan önce, oluşturucu tabanlı seri durumdan çıkarma, aşağıdaki örnekte görüldüğü gibi, tüm oluşturucu parametrelerini isteğe bağlı sayardı:
var result = JsonSerializer.Deserialize<Person>("{}");
Console.WriteLine(result); // Person { Name = , Age = 0 }
record Person(string Name, int Age);
.NET 9'dan başlayarak, isteğe bağlı olmayan oluşturucu parametrelerini gerekli olarak işlemek için RespectRequiredConstructorParameters bayrağını ayarlayabilirsiniz.
public static void RunIt()
{
JsonSerializerOptions options = new()
{
RespectRequiredConstructorParameters = true
};
string json = """{"Age": 42}""";
// The following line throws a JsonException at run time.
JsonSerializer.Deserialize<Person>(json, options);
}
record Person(string Name, int? Age = null);
Özellik geçişi
Özellik anahtarı ile RespectRequiredConstructorParameters ayarını global olarak açabilirsiniz. Proje dosyanıza aşağıdaki MSBuild öğesini ekleyin (örneğin, .csproj dosyası):
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Text.Json.Serialization.RespectRequiredConstructorParametersDefault" Value="true" />
</ItemGroup>
API, RespectRequiredConstructorParametersDefault mevcut uygulamaları bozmamak için .NET 9'da bir kabul bayrağı olarak uygulandı. Yeni bir uygulama yazıyorsanız, kodunuzda bu bayrağı etkinleştirmeniz kesinlikle önerilir.