【问题标题】:Removing $id from web api response从 web api 响应中删除 $id
【发布时间】:2021-02-09 12:54:12
【问题描述】:

我有一个 web api 5.0,它返回一个非常基本的对象的 dto。这里是课堂

[JsonObject(IsReference = false)] 
public class BillToReturnDto
{
    public string id { get; set; } 
    public string organizationId { get; set; } 

}

但是当我返回它的列表时,它会像这样返回

{ "$id": "1", “$值”:[ { "$id": "2", "id": "rvKLS178QWyWJu0tgESTnA", "organizationId": "ujoF624LSVyyQFapjauyAw", }, { "$id": "2", "id": "xvWfrRQWyyG0tgEd53dW", "organizationId": "ujoF624LSVyyQFapjauyAw", } ] }

如何删除这些 ID?我试过 IsReference false 你可以看到无济于事

更新:

这是控制器方法:

    public async Task<ActionResult> Get()
    {
        var userId = User.FindFirst("Id").Value;
        var accessToken = await _userService.GetAccessToken(Convert.ToInt32(userId));
        var bills = await _shoppingService.GetBills(accessToken);
        var billsToReturn = _mapper.Map<List<BillToReturnDto>>(bills.bills);
        return Ok(billsToReturn);
    }

【问题讨论】:

  • 请告诉我们返回结果的控制器
  • @IbraHimM.Nada 我已经在更新中做到了,谢谢
  • 你使用 asp.neet 核心?或 mvc 以确保
  • 我使用的是新的 5.0,它本质上是核心,但他们已经从名称中删除了核心
  • 最新的是核心 3.X

标签: c# asp.net-core-webapi c#-5.0


【解决方案1】:

startup.cs 中的这一行可能会在我的情况下造成问题:

   services.AddControllers()
                .AddJsonOptions(options =>
                {
                    options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
                });

删除 .AddJsonOptions([....]) 看看它是否适合你。

【讨论】:

  • 完美工作。谢谢。
【解决方案2】:

首先,如果您使用的是 .NET Core 3.1 到 5.0(当前是最新版本),请安装以下 NuGet 包: https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.NewtonsoftJson/)

它公开了一个名为 ReferenceLoopHandling 的新属性,可用于删除 Web API .JSON 响应中的 $id 引用。

接下来,在您的 Startup 类中,将以下内容附加到 services.AddControllers() 行:

// add controllers and the newtonsoft option to not include a reference $id
services.AddControllers().AddNewtonsoftJson(options =>
   options.SerializerSettings.ReferenceLoopHandling = 
Newtonsoft.Json.ReferenceLoopHandling.Ignore);

...现在试试...

【讨论】:

    【解决方案3】:

    Program.cs (.NET 6) 或 Startup.cs (.NET 5) 中的更改:

    services.AddControllers().AddJsonOptions(options =>
               {
                    options.JsonSerializerOptions.ReferenceHandler = 
                    ReferenceHandler.Preserve;
                });
    

    收件人:

    services.AddControllers().AddJsonOptions(options =>
                   {
                        options.JsonSerializerOptions.ReferenceHandler = 
                        ReferenceHandler.IgnoreCycles;
                    }); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多