Json.net sérialiser un champ privé spécifique
J'ai la classe suivante:
public class TriGrid
{
private List<HexTile> _hexes;
//other private fields...
//other public proprerties
}
Mon objectif est de sérialiser seulement la _hexes
domaine, j'ai donc créé le suivant ContractResolver:
internal class TriGridContractResolver : DefaultContractResolver
{
protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
return new List<MemberInfo> { objectType.GetMember("_hexes", BindingFlags.NonPublic | BindingFlags.Instance)[0] };
}
}
et quand je veux sérialiser une instance de TriGrid je fais:
var settings = new JsonSerializerSettings()
{
ContractResolver = new TriGridContractResolver()
};
var json = JsonConvert.SerializeObject(someTriGrid, settings);
string strintJson = json.ToString();
mais lorsque je vérifie la valeur de strintJson
est toujours "{}"
. Le _hexes
a des éléments, il n'est pas vide. Si je sérialiser un particulier HexTile
qu'il fonctionne comme prévu. Ce que je fais de mal ici?
source d'informationauteur Bsa0
Vous devez vous connecter pour publier un commentaire.
Il n'est pas nécessaire de mettre en œuvre une coutume
DefaultContractResolver
. La solution est de mettre[JsonProperty]
sur_hexes
et[JsonIgnore]
sur toutes les autres propriétés et les champs.Parce que les modèles d'affaires finira par changer, je préfère la mise en œuvre de ISerializable et de l'aide .NET moyen de créer des souvenirs (c'est à dire, un sac de propriété). Cela fonctionne mieux lorsque vous avez besoin de la version de vos objets lors de l'exécution. Tout ce que vous ne voulez pas sérialiser, ne pas le mettre dans le sac de propriété.
Surtout, depuis JSON.Net (Newtonsoft.Json) sera également à l'honneur avec ses de la sérialisation et la désérialisation méthodes.