Domanda

A causa di questo problema qui , sto cercando di scrivere un JsonConverter personalizzato chegestisce i casi in cui si crea una sottoclasse di un elenco o di una raccolta, quindi si aggiungono proprietà extra.Pertanto, un approccio sarebbe quello di ignorare tutte le proprietà della classe base e serializzare solo quelle nella classe definita.(Tecnicamente questo non funzionerà perché se si sottoclasse quella sottoclasse si interrompe la serializzazione, ma mi sono chiesto ...)

È possibile tramite la riflessione (beh, so che la risposta è 'sì' perché Reflector fa esattamente questo, ma non so come) ottenere solo i membri definiti nella classe stessa rispetto a quelli che eranoereditato?Ad esempio ...

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 questo caso, voglio riflettere su MySubClass e ottenere solo SubProp1 e SubProp2 ignorando BaseProp1 e BaseProp2.Quindi può essere come si fa?

M

È stato utile?

Soluzione

Durante la chiamata al metodo "GetMembers" per ottenere i membri del Type, è possibile specificare "DeclaredOnly" nel flag di associazione.

Altri suggerimenti

Devi selezionare tutti i membri in MySubClass e mantenere solo quelli in cui DeclaringType == MySubClass.

Con LINQ, qualcosa del genere (eccessivo):

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

O con sovraccarico GetMembers():

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

MemberInfo.DeclaringType dovrebbe fare ciò di cui hai bisogno.Per ottenere membri definiti direttamente nel tipo X, filtrare i membri per DeclaringType == typeof(X).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top