【问题标题】:ASP.NET Core 1.1.0 nulling values of Dictionary<string,object>Dictionary<string,object> 的 ASP.NET Core 1.1.0 空值
【发布时间】:2023-04-03 16:38:02
【问题描述】:

我有一个 ASP.NET WebAPI Core 1.1.0 应用程序在返回给调用者时未正确序列化我的响应。我有一个属性为 Dictionary&lt;string,object&gt; 的对象,当响应返回给调用者时,Payload 字典中的值将被清空。

对象:

ResponseObject {
  string ID {get; set;}
  DateTime Date {get; set;}
  Dictionary<string,object> Payload {get; set;}
  ...
}

控制器:

[HttpPost]
public async Task<ResponseObject> Post([FromBody] ResponseObject request) {
  // Object here is deserialized correctly.
  // Do work
  ResponseObject response = ...
  // Object here has values in the Payload
  return response;
}

当请求进入应用程序时,它会被正确反序列化为ResponseObject,应用程序会进行一些处理并以修改后的形式返回该对象。 Payload 字典中的键可以更改名称和编号。当ResponseObject 即将返回时,我可以在调试中看到数据在Payload 字典中。一旦调试器将return 留给控制器并将其发送回调用者,则字典值为空。

基于此,我可以假设在返回后序列化ResponseObject 期间,ASP.NET Core 应用程序中发生了问题。我不想更改默认序列化程序,因为应用程序中的其他所有内容都按预期工作。我知道使用 Json.NET 对 ResponseObject 进行反序列化和序列化是可行的,因为该应用程序在应用程序的其他部分完美地完成了它。我唯一能想到的是默认的 WebAPI 序列化程序使用不同的选项或者是不同的实现。

我错过了什么?我可以为序列化程序设置一个选项以显示要显示的值吗?还是我必须更改默认序列化程序?还是有其他我没有看到的解决方案?

【问题讨论】:

  • 当属性被声明为IDictionary&lt;string,object&gt;时,您是否观察到相同的行为?
  • 是的,我愿意。同样的问题。
  • 请在 GitHub 上提出问题 github.com/aspnet/Mvc/issues/new
  • @AlexWiese 有趣的是,在构建新示例项目以打开问题时,我无法重现它。必须与我们的 Web API 特定配置有关。我没有时间或动力去弄清楚到底是什么问题。感谢您的建议。

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


【解决方案1】:

我知道你说过你不想使用 Json.NET。相反,您可以尝试以下方法

return Json(response);

【讨论】:

  • 不行。不幸的是,这并没有解决问题。与以前完全相同的输出。
【解决方案2】:

我最终将控制器上的返回类型更改为字符串并自己直接序列化对象。这样我就可以控制序列化是如何完成的,而不必依赖 WebAPI 的魔豆来为我做这件事。这不是最理想的解决方案,也不是我想要的,但它确实有效。工作的结果控制器如下:

[HttpPost]
public async Task<string> Post([FromBody] ResponseObject request) {
  // Do work
  ResponseObject response = ...
  // I am using Jil here, but you could also use Json.NET
  return JSON.SerializeDynamic(response);
  // return JsonConvert.SerializeObject(response);
}

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 2014-10-22
    • 2012-05-13
    • 2015-04-12
    • 2013-01-28
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多