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)

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)