Bu serinin başlarında, serileştirme sırasında polimorfizm kullanılıyordu. System.Text.Json (sürüm 7.0’dan beri) sunuldu. Tip ayırıcı ayrıca seri durumdan çıkarmaya da yardımcı olur – burada da JSON serisini kaldırıcı polimorfik olarak çalışabilir.
Duyuru
Dr Holger Schwichtenberg, güvenlikle ilgili son derece kritik alanlarda bile yenilik ve deneyim odaklı yazılım geliştirme sunan MAXIMAGO’da Baş Teknoloji Uzmanıdır. Aynı zamanda, çok sayıda orta ölçekli ve büyük şirketi yazılım geliştirme ve işletim konusunda 38 tanınmış uzmanla danışmanlık ve eğitimle destekleyen uzman ağı www.IT-Visions.de’nin başkanıdır.
Örnek
Son bölümde olduğu gibi, sınıf Person türetilmeleri ile Consultant verwendet.
[JsonDerivedType(typeof(Person), typeDiscriminator: "P")]
[JsonDerivedType(typeof(Consultant), typeDiscriminator: "C")]
public class Person
{
public required int ID { get; set; }
public required string Name { get; set; }
public override string ToString()
{
return $"Person {Name}";
}
}
public class Consultant : Person
{
public string? Company { get; set; }
public override string ToString()
{
return $"Consultant {Name} arbeitet bei {Company}";
}
}
Eklemeden bir JSON dizesinden $type
var JSONohneTyp = """
{"ID":123,"Company":"www.IT-Visions.de",
"Name":"Holger Schwichtenberg"}
""";
Yalnızca türü açıkça belirtirseniz bir danışman nesnesi oluşturulur. Consultant İLE Deserialize<T>() belirtmek:
Duyuru
Consultant? p1a =
JsonSerializer.Deserialize<Consultant>(JSONohneTyp);
Console.WriteLine(p1a); // Consultant
Person? p1b =
JsonSerializer.Deserialize<Consultant>(JSONohneTyp);
Console.WriteLine(p1b); // Consultant
Person? p1c =
JsonSerializer.Deserialize<Person>(JSONohneTyp);
Console.WriteLine(p1c); // Person
Eğer o $type itibaren
var JSONmitTyp = """"
{"$type":"C","ID":123,
"Company":"www.IT-Visions.de",
"Name":"Holger Schwichtenberg"}
"""";
her üç durumda da a alırsın Consultant-İtiraz etsen bile Deserialize<Person>() çağrılar!
Consultant? p2a =
JsonSerializer.Deserialize<Consultant>(JSONmitTyp);
Console.WriteLine(p2a); // Consultant
Person? p2b =
JsonSerializer.Deserialize<Consultant>(JSONmitTyp);
Console.WriteLine(p2b); // Consultant
Person? p2c =
JsonSerializer.Deserialize<Person>(JSONmitTyp);
// Wegen $type kriegen wir dennoch Consultant statt Person!
Console.WriteLine(p2c);
Kullanılabilirlik
System.Text.Json .NET 7.0 ile birlikte bir NuGet paketi olarak piyasaya sürüldü, ancak aynı zamanda .NET Standard 2.0 altında ve dolayısıyla klasik .NET Framework sürümünde .NET Core 2.x/3.x ve .NET 5.0/.NET 6.0 üzerinde de çalışıyor 4.6.2.
(rm)
Haberin Sonu
Duyuru
Dr Holger Schwichtenberg, güvenlikle ilgili son derece kritik alanlarda bile yenilik ve deneyim odaklı yazılım geliştirme sunan MAXIMAGO’da Baş Teknoloji Uzmanıdır. Aynı zamanda, çok sayıda orta ölçekli ve büyük şirketi yazılım geliştirme ve işletim konusunda 38 tanınmış uzmanla danışmanlık ve eğitimle destekleyen uzman ağı www.IT-Visions.de’nin başkanıdır.
Örnek
Son bölümde olduğu gibi, sınıf Person türetilmeleri ile Consultant verwendet.
[JsonDerivedType(typeof(Person), typeDiscriminator: "P")]
[JsonDerivedType(typeof(Consultant), typeDiscriminator: "C")]
public class Person
{
public required int ID { get; set; }
public required string Name { get; set; }
public override string ToString()
{
return $"Person {Name}";
}
}
public class Consultant : Person
{
public string? Company { get; set; }
public override string ToString()
{
return $"Consultant {Name} arbeitet bei {Company}";
}
}
Eklemeden bir JSON dizesinden $type
var JSONohneTyp = """
{"ID":123,"Company":"www.IT-Visions.de",
"Name":"Holger Schwichtenberg"}
""";
Yalnızca türü açıkça belirtirseniz bir danışman nesnesi oluşturulur. Consultant İLE Deserialize<T>() belirtmek:
Duyuru
Consultant? p1a =
JsonSerializer.Deserialize<Consultant>(JSONohneTyp);
Console.WriteLine(p1a); // Consultant
Person? p1b =
JsonSerializer.Deserialize<Consultant>(JSONohneTyp);
Console.WriteLine(p1b); // Consultant
Person? p1c =
JsonSerializer.Deserialize<Person>(JSONohneTyp);
Console.WriteLine(p1c); // Person
Eğer o $type itibaren
var JSONmitTyp = """"
{"$type":"C","ID":123,
"Company":"www.IT-Visions.de",
"Name":"Holger Schwichtenberg"}
"""";
her üç durumda da a alırsın Consultant-İtiraz etsen bile Deserialize<Person>() çağrılar!
Consultant? p2a =
JsonSerializer.Deserialize<Consultant>(JSONmitTyp);
Console.WriteLine(p2a); // Consultant
Person? p2b =
JsonSerializer.Deserialize<Consultant>(JSONmitTyp);
Console.WriteLine(p2b); // Consultant
Person? p2c =
JsonSerializer.Deserialize<Person>(JSONmitTyp);
// Wegen $type kriegen wir dennoch Consultant statt Person!
Console.WriteLine(p2c);
Kullanılabilirlik
System.Text.Json .NET 7.0 ile birlikte bir NuGet paketi olarak piyasaya sürüldü, ancak aynı zamanda .NET Standard 2.0 altında ve dolayısıyla klasik .NET Framework sürümünde .NET Core 2.x/3.x ve .NET 5.0/.NET 6.0 üzerinde de çalışıyor 4.6.2.
(rm)
Haberin Sonu