c# - 底层类未转换为 json
问题描述
问题:最初的命令返回 ExecutionResult,其中包含类型为 DomainOperationResult 的 Data 属性。
只有在一种情况下,我需要返回一些其他数据,这些数据定义为 CreateOrderCommandResult,它是 DomainOperationResult 的后代,它包含附加字段 - Url。
大摇大摆地调用命令,在调试器中,一切都很好,带有快速查看的可见 id 和 url。
Json(result);
它表明它正在返回 Id 和 Url 属性。
但在 swagger、curl、postman 等中,只返回 id,尝试了一切。没有响应的 URL。
控制器工作正常,没有中间件,可能会改变返回的响应。
控制器方法:
{
public async Task<IActionResult> Create([FromBody] CreateOrderCommand command)
{
if (!ModelState.IsValid)
{
return await Task.FromResult(BadRequest(ModelState));
}
var result = await _commandExecutor.ExecuteAsync(command);
if (result.Success)
{
return Json(result);
}
return Json(result);
}
}
创建订单命令:
{
public override async Task<CommandExecutionResult> ExecuteAsync()
{
// .....
return await OkAsync(new CreateOrderCommandResult(orderId, payment.RedirectUrl));
}
}
域操作结果:
{
public class DomainOperationResult
{
public DomainOperationResult()
{
}
public DomainOperationResult(long id)
{
Id = id;
}
public long Id { get; }
}
创建订单命令结果:
{
public class CreateOrderCommandResult : DomainOperationResult
{
public CreateOrderCommandResult()
: base() { }
public CreateOrderCommandResult(long id, string url)
: base(id)
{
Url = url;
}
public string Url { get; set; }
}
}
执行结果:
public class ExecutionResult
{
public ExecutionResult()
{
}
public DomainOperationResult Data { get; set; }
}
返回响应:
{“成功”:真,“数据”:{“id”:0},“错误”:{“错误”:空}}
解决方案
仍然不知道,为什么这不起作用。
经过一番挖掘,找到了解决方法。
Response.Headers.Add("Content-type", "application/json"); return Content(JsonConvert.SerializeObject(result, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }));
返回这样的内容可以正常工作 - 至少它会生成我需要的一切。
推荐阅读
- php - 流元素 PUT 请求
- angular - 预选和更新角材料选择列表
- functional-programming - javascript折叠减少函数式编程
- c++ - QMainWindow上使用样式表的Qt 5.10半透明背景
- angular - 尝试链接到当前页面中的部分时不是有效的选择器错误
- r - 矢量化 R 中的图例
- python - 如何在 matplotlib 中使用 Humor Sans?
- python - 3D 点云图
- javascript - Socket.io 向所有客户端发出消息,但最初发出原始消息的客户端除外
- c# - 比较 ReadOnlyMemory 的最佳方法
实例?