gpt4 book ai didi

c# - 从 WebApi 中的 json 对象列表中删除引用 $id

转载 作者:行者123 更新时间:2023-11-30 20:15:24 25 4
gpt4 key购买 nike

我想更改我的响应数据格式

{
"$id": "1",
"$values": [
{
"$id": "2",
"OrderID": 3,
"Article": null
},
{
"$id": "3",
"OrderID": 4,
"Article": null
}
]
}

 [
{
"OrderID": 3,
"Article": null
},
{
"OrderID": 4,
"Article": null
}
]

我尝试在 WebApiConfig.cs 文件中添加这两行来配置 JsonFormatter

config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

但不起作用。

Controller 代码是这样的,它的类继承自ApiController

    public List<OrderDto> Get()
{
var serviceResult = orderService.LoadOrders();

if (serviceResult.IsValid)
{
var orders = serviceResult.GetObject();

var ordersDto = Mapper.Map<List<Order>, List<OrderDto>>(orders);

return ordersDto;
}
else
{
return null;
}
}

对这个解决方案有什么想法吗?

编辑 1:

OrderDto.cs代码

public class OrderDto
{
public int OrderID { get; set; }

public string Article { get; set; }
}

最佳答案

  1. 我相信,如果您使用的是 Web API,为了阐明操作的类型,您应该使用属性来装饰它们,例如[HttpGet], [HttpPost]
  2. 在使用 API 时,我会使用 Dtos 对象而不是 ViewModel 对象,因为它不是纯粹的 MVC 架构,许多客户可以通过不同的方式使用您的 API。<
  3. 我宁愿返回 BadRequest 响应 Request.CreateResponse(HttpStatusCode.BadRequest, "error message"),在您的 else 语句中包含一些错误消息,而不是 null。这将是一个快速的解决方案,但我会考虑在您的服务实现中抛出异常,并基于此将正确的错误消息返回给客户端。

这应该有效:

[System.Web.Http.HttpGet]
public HttpResponseMessage GetAllOrders()
{
//var serviceResult = orderService.LoadOrders();
// var isValid = serviceResult.IsValid
var isValid = true;
if (isValid)
{
// I used hardcoded values here just to show how to return a proper result
// you can call your service instead and do the mapping/other stuff

var result = new List<OrderDto>()
{
new OrderDto(){
OrderID = 3,
Article = "blah1"
},
new OrderDto(){
OrderID = 4,
Article = "blah2"
}
};
return Request.CreateResponse(HttpStatusCode.OK, result);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest, "Error Message");

}
}

public class OrderDto
{
public int OrderID { get; set; }

public string Article { get; set; }
}

WebApiConfig.cs 内容:

public static void Register(HttpConfiguration config)
{
// Web API configuration and services

// Web API routes
config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}

结果

var isValid = true;

enter image description here

var isValid = false;

enter image description here

关于c# - 从 WebApi 中的 json 对象列表中删除引用 $id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54826797/

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