【问题标题】:JsonSerializerSettings and Asp.Net CoreJsonSerializerSettings 和 Asp.Net Core
【发布时间】:2016-03-03 12:36:39
【问题描述】:

尝试设置 JsonOutputFormatter 选项:

var jsonFormatter = (JsonOutputFormatter) options.OutputFormatters.FirstOrDefault(f => f is JsonOutputFormatter);
if (jsonFormatter != null)
{
    jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}

mvcBuilder.AddJsonOptions(jsonOptions =>
    {
        jsonOptions.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    });

但只要我添加这个,我就会得到:

MissingMethodException:找不到方法:'Newtonsoft.Json.JsonSerializerSettings Microsoft.AspNet.Mvc.Formatters.JsonOutputFormatter.get_SerializerSettings()'。

我使用的是标准的Microsoft.AspNet.Mvc.Formatters.Json (6.0.0-rc1-final)

编辑:通过安装 Newtonsoft.Json 6.0.6 解决了这个问题(它会降级所有其他引用)

有人已经拿到了吗? 谢谢..

【问题讨论】:

  • 您尝试在哪里插入代码片段? mvcBuilder 是什么?您能否包括您使用的Startup.cs 中的ConfigureServices 方法的代码?打电话给AddJsonOptions是正确的地方。
  • 这只是今天随机开始发生在我身上。老实说,它昨天还在工作,这让我很困惑。

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


【解决方案1】:

.Net Core 1.0 RTM 带有开箱即用的 CamelCase 格式。这是来自 RC2 的行为 change。不过如果需要修改,试试这个sn-p:

services.AddMvc()
        .AddJsonOptions(opt =>
    {
        var resolver  = opt.SerializerSettings.ContractResolver;
        if (resolver != null)
        {
            var res = resolver as DefaultContractResolver;
            res.NamingStrategy = null;  // <<!-- this removes the camelcasing
        }
    });

更多信息here

对于 dotnet core 1.0.1:

  services
            .AddMvcCore()
            .AddJsonFormatters(o => o...);

【讨论】:

  • 非常感谢!我不知道自动骆驼套发生在哪里。
  • 知道 .Net core 1.1 中的这个调用是什么吗?
  • @LeviFuller 是一样的 - AddJsonOptions
  • 我已经配置了 SerializeSettings 覆盖。现在我必须重现所有内容,因为我无法直接设置 SerializerSettings。很多人不应该在 asp.net core 中这样做,因为它们并不是特别相关。
  • 我们正在迁移到 asp.net 核心并决定对所有内部内容使用默认设置 (camelCase)。但是,我们有一种情况,为了向后兼容外部系统,我们需要输出为 PascalCase,仅用于单个控制器。最好的方法是什么?
【解决方案2】:

我假设您使用的是 ASP.Net Core,您应该使用“Microsoft.AspNetCore.Mvc”:

所以替换这个:

"Microsoft.AspNet.Mvc": "6.0.0-rc1-final"

通过这个:

"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 2016-10-07
    • 2017-03-20
    • 2016-06-28
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多