Comment puis-je changer les noms de propriété lors de la sérialisation avec Json.net?
J'ai des données en C# objet DataSet. Je peux sérialiser dès maintenant à l'aide d'un Json.net convertisseur comme ce
DataSet data = new DataSet();
//do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
Cependant, il utilise la propriété des noms de data
lors de l'impression à la .fichier json. Je voudrais changer les noms de propriété sera quelque chose de différent (par exemple, changement 'foo' à 'bar').
Dans le Json.net la documentation, sous le titre "la Sérialisation et la Désérialisation JSON' → 'Attributs de la Sérialisation", il dit "JsonPropertyAttribute... permet d'indiquer le nom à être personnalisés". Mais il n'y a pas d'exemple. Personne ne sait comment utiliser un JsonPropertyAttribute de changer le nom de la propriété de quelque chose d'autre?
(Lien Direct à la documentation)
Json.net la documentation semble être rares. Si vous avez un très bon exemple, je vais essayer d'ajouter à la documentation officielle.
Merci!
- Pour info, il y a un exemple dans la documentation sous Échantillons -> Sérialisation JSON -> JsonPropertyAttribute nom. Pas sûr à quel point il a été ajouté.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez décorer la propriété que vous souhaitez contrôler son nom avec le
[JsonProperty]
attribut qui permet de spécifier un nom différent:Documentation: Attributs De La Sérialisation
[JsonProperty("FooBar")]
DefaultContractResolver
pourrait être une solution, si elles sont mises dans le même assembly où JsonConvert.Serialize() la méthode utilisée.DataMemberAttribute
comme[DataMember(Name = "some_custom_string)]
. La plupart des sérialiseurs, y compris ceux intégrés dans Microsoft sérialiseurs, savoir comment gérer cet attribut.Si vous n'avez pas accès aux classes pour modifier les propriétés, ou ne veulent pas utiliser toujours le même renommer la propriété, le changement de nom peut également être fait par la création d'un résolveur personnalisé.
Par exemple, si vous avez une classe appelée
MyCustomObject
, qui a une propriété appeléeLongPropertyName
, vous pouvez utiliser un résolveur personnalisé comme ça...Alors appel pour la sérialisation et la fourniture de la resolver:
Et le résultat sera raccourcie à {"Court":"prop valeur"} au lieu de {"LongPropertyName":"prop valeur"}
Plus d'infos sur les résolveurs ici
DefaultContractResolver
doit être mis dans le même assemblée où JsonConvert.Serialize() la méthode utilisée.Il y a encore une autre façon de faire, qui est d'utiliser un particulier NamingStrategy, qui peut être appliqué à une classe ou une propriété en les décorant avec des
[JSonObject]
ou[JsonProperty]
.Y sont prédéfinis stratégies de noms comme
CamelCaseNamingStrategy
, mais vous pouvez implémenter votre propre.La mise en œuvre de différentes stratégies de noms peuvent être trouvés ici: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization