【发布时间】:2023-04-03 16:38:02
【问题描述】:
我有一个 ASP.NET WebAPI Core 1.1.0 应用程序在返回给调用者时未正确序列化我的响应。我有一个属性为 Dictionary<string,object> 的对象,当响应返回给调用者时,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<string,object>时,您是否观察到相同的行为? -
是的,我愿意。同样的问题。
-
请在 GitHub 上提出问题 github.com/aspnet/Mvc/issues/new
-
@AlexWiese 有趣的是,在构建新示例项目以打开问题时,我无法重现它。必须与我们的 Web API 特定配置有关。我没有时间或动力去弄清楚到底是什么问题。感谢您的建议。
标签: c# asp.net-core json.net asp.net-core-1.1