.NET 8 In nicht-öffentliche Properties deserialisieren
Erfahren Sie, wie Sie in .NET 8 mit dem Attribut JsonInclude und parameterisierten Konstruktoren JSON in nicht-öffentliche Properties deserialisieren.
Ähnlich wie beim Serialisieren in nicht-öffentliche Member können Sie in nicht-öffentliche Member deserialisieren, indem Sie einen Konstruktor mit Parametern bereitstellen, deren Namen den nicht-öffentlichen Membern entsprechen, und die Member mit dem JsonInclude-Attribut versehen.
Springen wir direkt zu einem Beispiel:
public class MyClass
{
public MyClass(int privateProperty, int protectedProperty, int internalProperty)
{
PrivateProperty = privateProperty;
ProtectedProperty = protectedProperty;
InternalProperty = internalProperty;
}
[JsonInclude]
private int PrivateProperty { get; }
[JsonInclude]
protected int ProtectedProperty { get; }
[JsonInclude]
internal int InternalProperty { get; }
public int PublicProperty { get; set; }
}
Beachten Sie: PublicProperty haben wir nicht annotiert und auch nicht in den Konstruktor aufgenommen. Das ist nicht nötig, weil die Property öffentlich ist und einen öffentlichen Setter hat, sich also nach dem Erzeugen der Instanz zuweisen lässt.
Um die Deserialisierung in den oben definierten Typ auszuprobieren, können wir das tun:
string json = "{\"PrivateProperty\":1,\"ProtectedProperty\":2,\"InternalProperty\":3,\"PublicProperty\":4}";
var myObj = JsonSerializer.Deserialize<MyClass>(json);
Mehrere Konstruktoren bei der Deserialisierung
Hat Ihre Klasse mehrere Konstruktoren, müssen Sie dem Deserializer mit dem JsonConstructorAttribute den richtigen weisen.
public MyClass() { }
[JsonConstructor]
public MyClass(int privateProperty, int protectedProperty, int internalProperty)
{
PrivateProperty = privateProperty;
ProtectedProperty = protectedProperty;
InternalProperty = internalProperty;
}
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.