.net确保json键是小写的
大家好,在.Net中使用json的简单方法是确保按键以小写forms发送。
目前我正在使用newtonsoft.json库并简单地使用
string loginRequest = JsonConvert.SerializeObject(auth);
在这种情况下,auth只是以下对象
public class Authority { public string Username { get; set; } public string ApiToken { get; set; } }
这导致
{"Username":"Mark","ApiToken":"xyzABC1234"}
有没有确保用户名和apitoken键通过小写?
我不想简单地通过string.tolower()运行它,当然,因为用户名&apitoken的值是混合大小写。
我意识到我可以编程这样做,并手动创buildjsonstring,但我需要约20左右的json数据string,看看我是否可以节省自己一些时间。 想知道是否有任何已经build立的库,允许你强制执行小写键创build。
您可以为此创build自定义合约parsing程序。 以下合约parsing器将所有密钥转换为小写:
public class LowercaseContractResolver : DefaultContractResolver { protected override string ResolvePropertyName(string propertyName) { return propertyName.ToLower(); } }
用法:
var settings = new JsonSerializerSettings(); settings.ContractResolver = new LowercaseContractResolver(); var json = JsonConvert.SerializeObject(authority, Formatting.Indented, settings);
Wil导致:
{"username":"Mark","apitoken":"xyzABC1234"}
如果您总是想使用LowercaseContractResolver
序列化,请考虑将其封装到类中以避免重复:
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(); } } }
可以这样使用:
var json = LowercaseJsonSerializer.SerializeObject(new { Foo = "bar" }); // { "foo": "bar" }
ASP.NET MVC4 / WebAPI
如果您正在使用ASP.NET MVC4 / WebAPI,则可以使用默认包含的Newtonsoft.Json库中的CamelCasePropertyNamesContractResolver
。
protected void Application_Start() { JsonConfig.Configure(); } public static class JsonConfig { public static void Configure(){ var formatters = GlobalConfiguration.Configuration.Formatters; var jsonFormatter = formatters.JsonFormatter; var settings = jsonFormatter.SerializerSettings; settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); } }
- 如何修复Visual Studio 2015中的DNX / DNVM?
- InitializeComponent()是做什么的,它在WPF中是如何工作的?
- 如何使用asynchronous/等待的RestSharp
- 你能编译C#,所以在运行时不需要.NET Framework吗?
- 如何使用C#从excel文件读取数据
- Web API 2:如何使用camelCased属性名称,对象及其子对象返回JSON
- 无法加载计数器名称数据,因为无效的索引-Exception
- 为什么使用C#类System.Random而不是System.Security.Cryptography.RandomNumberGenerator?
- 什么是使用Assembly Attributes的最佳实践?