Assurer json touches sont minuscules .NET
Est-il de façon simple à l'aide de JSON dans .NET pour s'assurer que les clés sont envoyées comme des minuscules?
Pour le moment je suis en utilisant le newtonsoft de l'Json.NET bibliothèque et simplement à l'aide de
string loginRequest = JsonConvert.SerializeObject(auth);
Dans ce cas auth
est juste l'objet suivant
public class Authority
{
public string Username { get; set; }
public string ApiToken { get; set; }
}
Cette résultats dans
{"Username":"Mark","ApiToken":"xyzABC1234"}
Est-il un moyen de s'assurer que les username
et apitoken
touches de venir à travers comme des minuscules?
Je ne veux pas simplement de l'exécuter à travers String.ToLower()
bien sûr, parce que les valeurs de username
et apitoken
sont en casse mixte.
Je me rends compte que je peux en programmant le faire et de créer de la chaîne JSON manuellement, mais j'ai besoin de cela pour environ 20 ou si les données JSON cordes et je vais voir si je peut me sauver du temps. Je me demandais si il y a déjà construit des bibliothèques qui vous permettent de faire respecter les minuscules pour la création de clés.
- Peut-être que la sérialisation json lib propose une sorte de sérialisation des attributs que vous pouvez utiliser pour changer le format json sérialisé noms de vos propriétés?
- merci je vais essayer de trouver quelque chose qui le fait, mais jusqu'à présent infructueuses. En espérant que quelqu'un ici pourrait me diriger vers elle.
- This peut être utile dans le cas où vous propety se compose d'un mot.
- Hein. Je vais avoir le problème inverse... aussi-c'est drôle que vous parlez de "nom d'utilisateur" est mélangé cas. Vouliez-vous dire "nom d'utilisateur"?
- Pas simplement que les valeurs nécessaires pour rester mixte le cas où les clés Seulement ce que j'ai besoin de le toucher. La valeur de le laisser seul.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer un contrat personnalisé de résolution pour cette. La suite du contrat de résolution permettra de convertir toutes les clés en minuscules:
Utilisation:
Wil résultat:
Si vous voulez toujours de sérialiser l'aide de la
LowercaseContractResolver
, considérer l'enveloppant dans une classe pour éviter de vous répéter:Qui peut être utilisée comme ceci:
ASP.NET MVC4 /WebAPI
Si vous utilisez ASP.NET MVC4 /WebAPI, vous pouvez utiliser un
CamelCasePropertyNamesContractResolver
de Newtonsoft.Librairie Json qui inclus par défaut.CamelCasePropertyNamesContractResolver
. Maintenant, j'ai trouvéSystem.Net.Http.Formatting.JsonContractResolver
est la valeur par défaut dans WebAPI et cette classe est interne. Je endup avec réécrireJsonContractResolver
avec camel cas. Quelqu'un a signalé que cette publics aspnetwebstack.codeplex.com/workitem/228CamelCasePropertyNamesContratResolver
ne pas transformer les propriétés en minuscules, juste le premier char.Dans Json.NET 9.0.1 et, plus tard, il est possible de s'assurer que tous les noms des propriétés sont converties en minuscules à l'aide d'un custom
NamingStrategy
. Cette classe des extraits de la logique algorithmique de reconfiguration des noms de propriété du contrat de résolution à un autre, les objets légers qui peuvent être définies surDefaultContractResolver.NamingStrategy
.Ceci permet d'éviter la nécessité de créer un custom
ContractResolver
et donc peut être plus facile à intégrer dans les cadres qui disposent déjà de leur propre contrat de résolveurs.Définir
LowercaseNamingStrategy
comme suit:Puis sérialiser comme suit:
Notes -
À l'aide de
string.ToLowerInvariant()
assure que le même contrat est généré dans tous les lieux.Pour contrôler si remplacé les noms de propriété, dictionnaire des clés et des données d'extension noms sont mis en minuscule, vous pouvez définir
NamingStrategy.OverrideSpecifiedNames
,NamingStrategy.ProcessDictionaryKeys
ouNamingStrategy.ProcessExtensionDataNames
(Json.NET 10.0.1, et plus tard) àtrue
.Vous pouvez cache le contrat de résolution pour une meilleure performance.
Si vous n'avez pas accès à la sérialiseur paramètres de votre cadre, vous pouvez appliquer un
NamingStrategy
directement à votre objet comme suit:De ne pas modifier le
NamingStrategy
deCamelCasePropertyNamesContractResolver
. Ce contrat de résolution des actions d'informations de type à l'échelle mondiale à travers l'ensemble de ses instances, et ainsi de modifier une instance peut avoir des effets secondaires inattendus.vous pouvez utiliser "JsonProperty":
Utilisation: