.NET 7.0'da yeni [25]: System.text.json ile Sesigning'de Polimorfizm

Womanne

Member
Bu serinin önceki bölümünde, polimorfizm System.Text.Json (Sürüm 7.0'dan) Sunulan. Ayrımcı tip ayrıca DISTIARSE'e yardımcı olur: JSON-Delilizer polimorfik bile çalışabilir.










Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.








Örnek


Son bölümde olduğu gibi, sınıf Person Onların türevleriyle 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 JSON işaretleri zincirinden $type



var JSONohneTyp = """
{"ID":123,"Company":"www.IT-Visions.de",
"Name":"Holger Schwichtenberg"}
""";



Tür açık bir şekilde yalnızca bir danışman nesnesi ortaya çıkar Consultant İLE Deserialize<T>() belirtilen:





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 $type itibaren



var JSONmitTyp = """"
{"$type":"C","ID":123,
"Company":"www.IT-Visions.de",
"Name":"Holger Schwichtenberg"}
"""";



Her üç duruma da girin Consultant-Borje, sen bile Deserialize<Person>() Arama!



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 Bir Nueget paketi olarak .NET 7.0 ile birlikte yayınlandı, ancak .NET Standard 2.0'da ve bu nedenle 4.6.2 sürümünden klasik .NET çerçevesinde .NET çekirdeği 2.x/3RDX ve .NET 5.0/.NET 6.0'da da çalışır.


(RME)
 
Üst