首页新闻找找看学习计划

ASP.NET Core 中 Json 序列化 dynamic 类型时首字母没有小写

0
悬赏园豆:30 [已解决问题] 解决于 2020-03-17 11:37

下面的代码中 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);
        }
    }
}
dudu的主页 dudu | 高人七级 | 园豆:39411
提问于:2020-03-17 08:47
< >
分享
最佳答案
0

终于试出来了。

对于 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
    });
dudu | 高人七级 |园豆:39411 | 2020-03-17 11:36

......这要是一个奇怪的命名规则岂不是完蛋了

猝不及防 | 园豆:1965 (小虾三级) | 2020-03-17 11:40
其他回答(2)
0

https://www.cnblogs.com/dehai/p/4581664.html
大佬参考一下,不知道有没有帮助

收获园豆:10
猝不及防 | 园豆:1965 (小虾三级) | 2020-03-17 09:09

谢谢,有帮没有助,我们没有使用 Newtonsoft.Json ,用的是 ASP.NET Core 内置的 Sytem.Text.Json

支持(0) 反对(0) dudu | 园豆:39411 (高人七级) | 2020-03-17 09:19
0

替换默认的dynamic序列化器? dynamic本质上是一个字典

收获园豆:20
czd890 | 园豆:8546 (大侠五级) | 2020-03-17 10:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册