gpt4 book ai didi

c# - .NET Core Web API 序列化问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:17 25 4
gpt4 key购买 nike

这是一个简单的 API Controller 的摘录:

[Route("api/cities")]
public class CitiesController : BaseController
{
internal protected ICityRepository _cityRepository;
public CitiesController(ICityRepository cityRepository) : base()
{
_cityRepository = cityRepository;
}

// GET: api/Cities
[HttpGet]
public IEnumerable<City> Get()
{
var cities = _cityRepository.GetAll();
return cities;
}

// GET: api/Cities/5
[HttpGet("{id}", Name = "GetCity")]
public IActionResult Get(Guid id)
{
City city = _cityRepository.Get(id);
if (city == null)
{
return NotFound();
}

return new ObjectResult(city);
}

BaseController 目前只是继承自 Controller。每当我调用 api/cities 或 api/cities/E4477C67-894E-492C-95DE-001DC73730A1 时,我都会得到这样的返回:

{
"$id": "2828",
"$values": [
{
"$id": "2829"
},
{
"$id": "2830"
},
{
"$id": "2831"
},
...

{
"$id": "2827"
}

分别。看起来它正在返回序列化对象的序列号或其他东西。经过一番谷歌搜索我遇到了 JsonObject 属性,通过将其添加到我的基类,使对象以某种方式序列化。注意“某种时尚”。

基本 get 的响应看起来有点像这样:

{
"$id": "2",
"$values": [
{
"$id": "3",
"name": "Beigem",
"zipCode": "1852",
"id": "e4477c67-894e-492c-95de-001dc73730a1",
"concurrencyStamp": "AAAAAAAAZxE=",
"created": "2017-11-06T08:22:19.9733333",
"createdBy": null,
"modified": "2017-11-06T08:22:19.9733333",
"modifiedBy": null,
"isNew": false,
"__Key": "e4477c67-894e-492c-95de-001dc73730a1"
},
...

仍然是 $id 和 $values 的东西。我不想要那个。我希望它是一个干净的 json 结果,而不是像这样的梨形结果。

  1. 为什么需要添加 JsonObject 属性?我在任何其他示例中都看不到它。
  2. 奇怪的格式是怎么回事。我也找不到任何引用...

最佳答案

通常你should not序列化 EF 实体。

考虑为您的 Controller 定义数据契约,并仅返回 API 调用设计所需的数据。通过这种方法,您将从存储库中获取 EF 实体并将相关字段复制到输出数据对象:

// GET: api/Cities/5
[HttpGet("{id}", Name = "GetCity")]
public IActionResult Get(Guid id)
{
City city = _cityRepository.Get(id);
if (city == null)
{
return NotFound();
}

CityData cityData = new CityData
{
Name = city.Name,
...
};

return Json(cityData);
}

关于c# - .NET Core Web API 序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47217839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com