【问题标题】:Why is camelcasing with Newtonsoft Json not working without serializer?为什么在没有序列化程序的情况下使用 Newtonsoft Json 进行驼峰化?
【发布时间】:2019-12-29 20:42:22
【问题描述】:

我有一个对象,我想序列化为 JSON 并使用 camelcase。 我有一个 .Net Core 3 Web Api 应用程序,在我的启动文件中我有以下服务注册:

services.AddControllersWithViews();
services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});

在我的控制器中,我有以下内容:

var js = JObject.FromObject(obj);

现在,这个序列化的结果是这样的:

{
 StartRow: 1,
 EndRow: 2
}

当我实例化一个 JsonSerializer 并将其作为第二个参数传递时,我得到了预期的驼峰格式:

{
 startRow: 1,
 endRow: 2
}

代码如下:

var serializer = new JsonSerializer()
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
var js = JObject.FromObject(obj, serializer);

这意味着我必须为每个控制器配备一个序列化程序。

我想知道我是否遗漏了什么或注册错误。

谢谢。

【问题讨论】:

  • 您的服务注册配置 Web API 如何序列化 HTTP 请求和响应中的 JSON 对象。它不影响静态JObject.FromObject 方法。
  • 如果您想全局设置序列化程序设置,请参阅Set default global json serializer settings

标签: c# json asp.net-core json.net


【解决方案1】:

试试这个:

public void ConfigureServices(IServiceCollection services)
{
    //do your stuff..
    services.AddControllers().AddNewtonsoftJson();
    JsonConvert.DefaultSettings = () => new JsonSerializerSettings
    {
        ContractResolver = new CamelCasePropertyNamesContractResolver()
    };
    //do your stuff..
}

参考:

Serializing a PascalCase Newtonsoft.Json JObject to camelCase

【讨论】:

    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多