目前,我的Web API将JSON数据作为一个未命名的对象数组发送,如下所示:
[
{
"productTypeId": 1,
"productCategoryId": 4,
"name": "Provider Frame",
"memberCost": 75.00,
"providerCost": 25.00
},
{
"productTypeId": 1,
"productCategoryId": 4,
"name": "Customer Frame",
"memberCost": 0.00,
"providerCost": 0.00
},
{
"productTypeId": 1,
"productCategoryId": 4,
"name": "Fireproof Frame",
"memberCost": 75.00,
"providerCost": 25.00
}
]
有没有办法将API更改为像这样发送数据?
{
"frames": [
{
"productTypeId": 1,
"productCategoryId": 4,
"name": "Provider Frame",
"memberCost": 75.00,
"providerCost": 25.00
},
{
"productTypeId": 1,
"productCategoryId": 4,
"name": "Customer Frame",
"memberCost": 0.00,
"providerCost": 0.00
},
{
"productTypeId": 1,
"productCategoryId": 4,
"name": "Fireproof Frame",
"memberCost": 75.00,
"providerCost": 25.00
}
]
}
我想让我的前端框架能够按名称读取JSON对象,而不是假设它是“数据”。这有意义吗?
以下是Web API的代码:
public sealed class FramesController : ApiController
{
private readonly IProductService prodSvc;
public FramesController(IProductService _prodSvc)
{
prodSvc = _prodSvc;
}
public IEnumerable<Product> GetFrames(int productTypeId)
{
return prodSvc.GetProductsByCategoryId((int)Enums.CategoryGroup.Frame, productTypeId);
}
}
发布于 2018-08-06 07:23:07
更新操作以返回封装在具有所需属性名称的对象中的数据
public sealed class FramesController : ApiController {
private readonly IProductService prodSvc;
public FramesController(IProductService _prodSvc) {
prodSvc = _prodSvc;
}
public IHttpActionResult GetFrames(int productTypeId) {
var products = prodSvc.GetProductsByCategoryId((int)Enums.CategoryGroup.Frame, productTypeId);
if(!products.Any())
return NotFound();
var result = new { frames = products.ToArray() };
return Ok(result);
}
}
上面的示例使用匿名类型,但也可以很容易地使用像这样的具体类型
public class GetFramesResult {
public Product[] frames { get; set; }
}
并在动作中使用
var result = new GetFramesResult { frames = products.ToArray() };
发布于 2018-08-06 05:35:44
用一个类包装你的响应类型,并给它一个名为“frame”的数组属性,它的类型是frame类。
从http://json2csharp.com/获得一些帮助
应该返回YourResponse类的实例,如下所示:
public class Frame
{
public int productTypeId { get; set; }
public int productCategoryId { get; set; }
public string name { get; set; }
public double memberCost { get; set; }
public double providerCost { get; set; }
}
public class YourResponse
{
public List<Frame> frames { get; set; }
}
发布于 2018-08-06 05:36:20
您可以使用ExpandoObject:
dynamic data = new ExpandoObject();
data.frames = yourObject;
return Json(data);
https://stackoverflow.com/questions/51698309
复制相似问题