如何强制 System.Text.Json.JsonElement.GetProperty 使用不区分大小写的方法搜索属性?

Hos*_*lah 5 .net c# system.text.json

这是我的 JSON:

{
    firstName: 'Somebody',
    lastName: 'Else'
}
Run Code Online (Sandbox Code Playgroud)

我将其反序列化为JsonElement使用以下选项:

var options = new JsonSerializerOptions {
                    WriteIndented = true,
                    PropertyNameCaseInsensitive = true,
                    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
                };
Run Code Online (Sandbox Code Playgroud)

但后来我想搜索属性,它变得区分大小写

element.GetProperty("FirstName") // this returns null
element.GetProperty("firstName") // this returns 'Somebody'
Run Code Online (Sandbox Code Playgroud)

如何强制GetProperty方法不区分大小写?

小智 4

根据文档,您应该能够JsonNamingPolicy像这样创建一个应该完成这项工作的文档:

using System.Text.Json;

namespace SystemTextJsonSamples
{
    public class LowerCaseNamingPolicy : JsonNamingPolicy
    {
        public override string ConvertName(string name) =>
            name.ToLower();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:然后您可以通过将选项配置更改为以下来使用它:

var options = new JsonSerializerOptions {
    WriteIndented = true,
    PropertyNameCaseInsensitive = true,
    PropertyNamingPolicy = new LowerCaseNamingPolicy()
};
Run Code Online (Sandbox Code Playgroud)

编辑2:

那么您可以通过以下方式搜索该房产:

element.GetProperty("FirstName".ToLower())
element.GetProperty("firstName".ToLower())
Run Code Online (Sandbox Code Playgroud)