Je donne les résultats suivants:En utilisant JSON.NET, comment puis-je sérialiser ces membres hérités?
public class MyClass : SuperClass {
[JsonProperty]
public virtual string Id { get; set; }
}
public abstract class SuperClass {
public int GetHashCode() {
//do things here
}
}
Je ne peux pas modifier SuperClass
. Quand je vais à la sérialisation à l'aide JSON JsonNet je ferai quelque chose comme ceci:
JsonSerializerSettings serializer = new JsonSerializerSettings {
//serializer settings
};
var jsonNetResult = new JsonNetResult {
Data = myClass,
SerializerSettings = serializer
};
return jsonNetResult;
Il est évident que ce ne sera pas sérialiser GetHashCode()
. Si je vais:
var jsonNetResult = new JsonNetResult {
Data = myClass.GetHashCode(),
SerializerSettings = serializer
};
Il correctement sérialiser la valeur, est-il un paramètre sérialiseur je peux utiliser pour le dire d'inclure GetHashCode()
?
Edit: Je dois ajouter que je suis en ce moment la création d'une propriété avec seulement arriver à cette fin, à savoir
[JsonProperty]
public virtual int GetHashCodeJson { get { return GetHashCode(); }
Eh bien un moyen de contourner c'est d'avoir une propriété sans get et pas de jeu, qui fait référence à la méthode, qui fonctionne bien. Y a-t-il une meilleure façon de gérer cela? Ensuite, vous obtenez des propriétés alambiquées comme GetHashCodeJson {get {return GetHashCode(); }} –
Je suis d'accord que le nom n'est pas si bon. Dans votre cas, il pourrait s'agir simplement de HashCode au lieu de GetHashCodeJson si vous vouliez le faire, mais le problème reste le même, vous avez besoin d'un nom différent pour la propriété que la méthode. –