110 votes

.net s'assurant que les clés json sont en minuscule

Salut à tous 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.librairie json 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; }
}

Il en résulte

{"Username":"Mark","ApiToken":"xyzABC1234"}

Est-il loin pour s'assurer que le nom d'utilisateur et apitoken touches de venir à travers comme des minuscules ?

Je ne veux pas simplement de l'exécuter par le biais de la chaîne.tolower() bien sûr, parce que les valeurs de nom d'utilisateur et apitoken sont en casse mixte.

Je me rends compte que je peux programically ce 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 chaînes et de voir si je peut me sauver du temps. Vous vous demandez si il y a déjà construire des bibliothèques qui vous permettent de faire respecter les minuscules pour la création de clés.

181voto

alexn Points 25639

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:

public class LowercaseContractResolver : DefaultContractResolver
{
    protected override string ResolvePropertyName(string propertyName)
    {
        return propertyName.ToLower();
    }
}

Utilisation:

var settings = new JsonSerializerSettings();
settings.ContractResolver = new LowercaseContractResolver();
var json = JsonConvert.SerializeObject(authority, Formatting.Indented, settings);

Wil résultat:

{"username":"Mark","apitoken":"xyzABC1234"}

Si vous voulez toujours de sérialiser l'aide de l' LowercaseContractResolver, considérer l'enveloppant dans une classe pour éviter de vous répéter:

public class LowercaseJsonSerializer
{
    private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
    {
        ContractResolver = new LowercaseContractResolver()
    };

    public static string SerializeObject(object o)
    {
        return JsonConvert.SerializeObject(o, Formatting.Indented, Settings);
    }

    public class LowercaseContractResolver : DefaultContractResolver
    {
        protected override string ResolvePropertyName(string propertyName)
        {
            return propertyName.ToLower();
        }
    }
}

Qui peut être utilisée comme ceci:

var json = LowercaseJsonSerializer.SerializeObject(new { Foo = "bar" });
// { "foo": "bar" }

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X