【问题标题】:Disable Newtonsoft changing JSON case [duplicate]禁用 Newtonsoft 更改 JSON 大小写 [重复]
【发布时间】:2020-06-10 07:10:08
【问题描述】:

我有一个包含字段的文档:

{
   FOB: "..."
}

但是当我退货时:

    [HttpGet("{documentRef}")]
    public ActionResult<Ten> Get(string documentRef)
    {
        var data = _service.FindOneTen(documentRef);
        if (data != null) return data;
        Response.StatusCode = 400;
        return NotFound();
    }

转换成这样:

{
    fob: "..."
}

我怎样才能阻止这种情况发生/为什么会发生这种情况?

我见过人们使用的例子

PropertyNamingPolicy = null;

为 MVC/我尝试但没有工作的普通 JSON 禁用它。

启动:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers().AddNewtonsoftJson();
    }

编辑

虽然Objects exposed on JSON web-api - how to stop the property names changing case? 以一种方式解决问题,但我宁愿不需要为模型中的每个字段指定。

【问题讨论】:

  • “我有一份文件” - 什么样的“文件”? MongoDB? Ten 类是什么样的?阅读How to Ask 并提供所有相关详细信息。
  • 您能指定,您想使用哪种约定?您想避免使用 camelCase 约定或使用您自己的约定名称

标签: c# asp.net-mvc-3 asp.net-web-api json.net


【解决方案1】:

使用这个

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

【讨论】:

  • 很遗憾这不起作用。
  • @Jack 我更新了我的答案,它成功了
  • 这比标记为重复的那个更好,因为它实际上回答了我的问题。
【解决方案2】:

如果您使用的是 .net 核心。您可以尝试使用默认的 .net 核心序列化程序,它应该保留原始大小写。

System.Text.Json.JsonSerializer.Serialize()

另外,你需要在 Startup.ConfigureServices() 中进行配置

services.AddMvc().AddJsonOptions(o => o.JsonSerializerOptions.PropertyNamingPolicy = null);

如果你需要使用 Json.net 那就用这个

services.AddMvc().AddNewtonsoftJson(o =>
{
o.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

【讨论】:

  • 我需要使用 Newton,因为我需要它来序列化一些 JObjects。
  • @Jack,我刚刚为 Newtonsoft (Json.net) 添加了解决方案
  • 请不要复制答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多