You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Web API返回Ok(result)仅显示基础属性问题

问题

接口代码如下:

public ActionResult LoginGet([FromBody]PostHelperEntity<Sw_User_LoginDto> helperEntity)
{
   var result = _service.GetSingle(x => x.UserName == helperEntity.Entity.UserName && x.Password == helperEntity.Entity.Password);
   return Ok(result);
}

result变量能正确获取包含name和surname字段的数据,但直接返回Ok(result)时,仅返回基础属性,结果如下:

{
    "data": {
        "id": 1,
        "createDateTime": null,
        "updateDateTime": null
    },
    "listData": null,
    "success": true,
    "message": null
}

改用return Ok(JsonConvert.SerializeObject(result))时,Postman能收到包含name和surname的完整数据。

解决方案

核心原因

ASP.NET Core默认使用System.Text.Json作为序列化器,而JsonConvert是Newtonsoft.Json的方法,两者的序列化规则、配置逻辑存在差异,导致默认序列化器未正确处理name和surname字段。

具体解决办法

  • 统一使用Newtonsoft.Json作为默认序列化器
    在项目配置中替换默认序列化器,让接口返回时自动用Newtonsoft.Json处理,和手动调用的逻辑保持一致:

    // .NET 6+ Program.cs 示例
    builder.Services.AddControllers()
        .AddNewtonsoftJson(options =>
        {
            // 可按需添加配置,比如忽略循环引用、自定义日期格式等
            options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        });
    
  • 检查实体类的序列化特性
    确认name和surname所在的实体类,是否被添加了[JsonIgnore](System.Text.Json特性)或[IgnoreDataMember]特性,导致默认序列化器忽略这些字段。如果有,直接移除;若需要针对不同序列化器做配置,可添加Newtonsoft.Json的[JsonProperty]特性强制字段被序列化。

  • 检查成员访问修饰符
    确保name和surname的字段/属性是public修饰的。System.Text.Json默认仅序列化公共成员,若这两个成员是非公共的,默认序列化器会直接忽略,而Newtonsoft.Json在特定配置下可能会处理非公共成员(若无特殊配置,也仅处理公共成员,需排查此情况)。

内容的提问来源于stack exchange,提问作者batuhan aslantürk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:50:15