Is there simple way using JSON in .NET to ensure that the keys are sent as lower case?
At the moment I'm using the newtonsoft's Json.NET library and simply using
string loginRequest = JsonConvert.SerializeObject(auth);
In this case auth is just the following object
public class Authority
{
public string Username { get; set; }
public string ApiToken { get; set; }
}
This results in
{"Username":"Mark","ApiToken":"xyzABC1234"}
Is there a way to ensure that the username and apitoken keys come through as lowercase?
I don't want to simply run it through String.ToLower() of course because the values for username and apitoken are mixed case.
I realise I can programatically do this and create the JSON string manually, but I need this for approx 20 or so JSON data strings and I'm seeing if I can save myself some time. I'm wondering if there are any already built libraries that allow you to enforce lowercase for key creation.
You can create a custom contract resolver for this. The following contract resolver will convert all keys to lowercase:
public class LowercaseContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.ToLower();
}
}
Usage:
var settings = new JsonSerializerSettings();
settings.ContractResolver = new LowercaseContractResolver();
var json = JsonConvert.SerializeObject(authority, Formatting.Indented, settings);
Wil result in:
{"username":"Mark","apitoken":"xyzABC1234"}
If you always want to serialize using the LowercaseContractResolver, consider wrapping it in a class to avoid repeating yourself:
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();
}
}
}
Which can be used like this:
var json = LowercaseJsonSerializer.SerializeObject(new { Foo = "bar" });
// { "foo": "bar" }
If you are using ASP.NET MVC4 / WebAPI, you can use a CamelCasePropertyNamesContractResolver from Newtonsoft.Json library which included by default.
这篇关于确保 .NET 中的 json 键是小写的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
读取 XML 时忽略空格Ignore whitespace while reading XML(读取 XML 时忽略空格)
使用 HTMLAgilityPack 仅提取页面文本extracting just page text using HTMLAgilityPack(使用 HTMLAgilityPack 仅提取页面文本)
C# 从 XML 中提取数据C# extracting data from XML(C# 从 XML 中提取数据)
读取 XML(从字符串)并获取一些字段 - 读取 XML 时出Read a XML (from a string) and get some fields - Problems reading XML(读取 XML(从字符串)并获取一些字段 - 读取 XML 时出现问题)
在 .net 中读取大型 XML 文档Reading large XML documents in .net(在 .net 中读取大型 XML 文档)
如何使用 C#/LINQ 将 XML 转换为 JSON?How to convert XML to JSON using C#/LINQ?(如何使用 C#/LINQ 将 XML 转换为 JSON?)