J'ai des données dans un objet C # DataSet. Je peux le sérialiser maintenant en utilisant un convertisseur Json.net comme celui-ci
DataSet data = new DataSet();
// do some work here to populate 'data'
string output = JsonConvert.SerializeObject(data);
Cependant, cela utilise les noms de propriété de data
lors de l'impression dans le fichier .json. Je voudrais changer les noms de propriété pour être quelque chose de différent (par exemple, changer "foo" en "bar").
Dans la documentation Json.net , sous 'Sérialisation et désérialisation JSON' → 'Attributs de sérialisation', il est écrit "JsonPropertyAttribute ... permet de personnaliser le nom". Mais il n'y a pas d'exemple. Quelqu'un sait-il comment utiliser un JsonPropertyAttribute pour changer le nom de la propriété en autre chose?
( Lien direct vers la documentation )
La documentation de Json.net semble être rare. Si vous avez un bon exemple, je vais essayer de l'ajouter à la documentation officielle. Merci!
la source
Réponses:
Vous pouvez décorer la propriété que vous souhaitez contrôler son nom avec l'
[JsonProperty]
attribut qui vous permet de spécifier un nom différent:Documentation: Attributs de sérialisation
la source
[JsonProperty("FooBar")]
Si vous n'avez pas accès aux classes pour modifier les propriétés ou si vous ne souhaitez pas toujours utiliser la même propriété de renommage, le changement de nom peut également être effectué en créant 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 celui-ci…Appelez ensuite la sérialisation et fournissez le résolveur:
Et le résultat sera raccourci à {"Short": "prop value"} au lieu de {"LongPropertyName": "prop value"}
Plus d'informations sur les résolveurs personnalisés ici
la source
DefaultContractResolver
doit être placé dans le même assembly où la méthode JsonConvert.Serialize () est utilisée.Il y a encore une autre façon de le faire, qui utilise une NamingStrategy particulière , qui peut être appliquée à une classe ou une propriété en les décorant avec
[JSonObject]
ou[JsonProperty]
.Il existe des stratégies de nommage prédéfinies comme
CamelCaseNamingStrategy
, mais vous pouvez implémenter les vôtres.La mise en œuvre de différentes stratégies de dénomination peut être trouvée ici: https://github.com/JamesNK/Newtonsoft.Json/tree/master/Src/Newtonsoft.Json/Serialization
la source