Frage

Aufgrund dieses Problems hier versuche ich, einen benutzerdefinierten JsonConverter zu schreibenBehandelt Fälle, in denen Sie eine Liste oder Sammlung unterordnen und dieser dann zusätzliche Eigenschaften hinzufügen.Ein Ansatz wäre daher, alle Eigenschaften der Basisklasse zu ignorieren und nur die in der definierten Klasse zu serialisieren.(Technisch funktioniert das nicht, denn wenn Sie diese Unterklasse unterordnen, brechen Sie die Serialisierung, aber ich habe mich gefragt ...)

Ist es möglich, über Reflexion (nun, ich weiß, die Antwort lautet "Ja", weil Reflector genau das tut, aber ich weiß nicht wie) nur die Mitglieder zu erhalten, die in der Klasse selbst definiert sind, im Gegensatz zu denen, die es warenvererbt?Zum Beispiel ...

public class MyBaseClass
{
    public string BaseProp1 { get; set; }
    public string BaseProp2 { get; set; }
}

public class MySubClass : MyBaseClass
{
    public string SubProp1 { get; set; }
    public string SubProp2 { get; set; }
}

In diesem Fall möchte ich über MySubClass nachdenken und nur SubProp1 und SubProp2 erhalten, während BaseProp1 und BaseProp2 ignoriert werden.Also kann das sein, wie wird das gemacht?

M

War es hilfreich?

Lösung

Während Sie die Methode "GetMembers" aufrufen, um die Mitglieder des Typs abzurufen, können Sie im Bindungsflag "DeclaredOnly" angeben.

Andere Tipps

Sie müssen alle Mitglieder in MySubClass auswählen und nur diejenigen behalten, in denen DeclaringType == MySubClass enthalten ist.

Mit LINQ so etwas (Overkill):

MemberInfo[] notInherited = GetType("MySubClass").GetMembers().Where(m => m.DeclaringType == GetType("MySubClass"));

Oder mit GetMembers()-Überladung:

MemberInfo[] notInherited = GetType("MySubClass").GetMembers(BindingFlags.DeclaredOnly);

MemberInfo.DeclaringType sollte genau das tun, was Sie benötigen.Um Mitglieder direkt in Typ X zu definieren, filtern Sie die Mitglieder nach DeclaringType == typeof(X).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top