Ensuring json keys are lowercase in .NET(确保 .NET 中的 json 键是小写的)
问题描述
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" }
ASP.NET MVC4 / WebAPI
If you are using ASP.NET MVC4 / WebAPI, you can use a CamelCasePropertyNamesContractResolver from Newtonsoft.Json library which included by default.
这篇关于确保 .NET 中的 json 键是小写的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:确保 .NET 中的 json 键是小写的
基础教程推荐
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
