从 web api 响应中删除 $id
Posted
技术标签:
【中文标题】从 web api 响应中删除 $id【英文标题】:Removing $id from web api response 【发布时间】: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 【参考方案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;
);
【讨论】:
以上是关于从 web api 响应中删除 $id的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent API 资源:从响应(集合)中删除“数据”键
如何从 CURL 响应 PHP API 的 JSON 字符串中删除引号、不需要的数据