下面的代码中 result 的类型是 dynamic ,序列化出来 json 采用的是 PascalCase 名规范,没有采用 camelCase 命名规范,如果不是 dynamic 类型,没有这个问题。
public async Task<IActionResult> Get()
{
//...
return Json(result);
}
请问如何解决?
重现问题的代码(匿名类型 anonymous type)
using System;
using System.Text.Json;
namespace Q126259
{
class Program
{
static void Main(string[] args)
{
var json = JsonSerializer.Serialize(
new
{
Title = "Coding Changes the World",
Author = "Cnblogs"
});
Console.WriteLine(json);
}
}
}
终于试出来了。
对于 dynamic 类型,需要设置 PropertyNameCaseInsensitive
+ DictionaryKeyPolicy
public async Task<IActionResult> Get()
{
//...
return Json(
result,
new JsonSerializerOptions
{
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true
});
}
对于匿名类型,需要设置 PropertyNameCaseInsensitive
+ PropertyNamingPolicy
var json = JsonSerializer.Serialize(
new
{
Title = "Coding Changes the World",
Author = "Cnblogs"
},
options: new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true
});
......这要是一个奇怪的命名规则岂不是完蛋了
https://www.cnblogs.com/dehai/p/4581664.html
大佬参考一下,不知道有没有帮助
谢谢,有帮没有助,我们没有使用 Newtonsoft.Json ,用的是 ASP.NET Core 内置的 Sytem.Text.Json
替换默认的dynamic序列化器? dynamic本质上是一个字典
DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true
当dynamic的属性是list类型,序列化还是没有采用camelCase命名规范。如下面的Children
{"id":1606155335002,"label":"研发部","Children":[]}
请问 当dynamic 是数组时 解决了吗