首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Web API 2发送命名JSON对象?

如何从Web API 2发送命名JSON对象?
EN

Stack Overflow用户
提问于 2018-08-06 05:14:57
回答 3查看 158关注 0票数 1

目前,我的Web API将JSON数据作为一个未命名的对象数组发送,如下所示:

代码语言:javascript
复制
[
  {
    "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更改为像这样发送数据?

代码语言:javascript
复制
{
  "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的代码:

代码语言:javascript
复制
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);
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-06 07:23:07

更新操作以返回封装在具有所需属性名称的对象中的数据

代码语言:javascript
复制
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);
    }
}

上面的示例使用匿名类型,但也可以很容易地使用像这样的具体类型

代码语言:javascript
复制
public class GetFramesResult {
    public Product[] frames { get; set; }
}

并在动作中使用

代码语言:javascript
复制
var result = new GetFramesResult { frames = products.ToArray() };
票数 1
EN

Stack Overflow用户

发布于 2018-08-06 05:35:44

用一个类包装你的响应类型,并给它一个名为“frame”的数组属性,它的类型是frame类。

http://json2csharp.com/获得一些帮助

应该返回YourResponse类的实例,如下所示:

代码语言:javascript
复制
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; }
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-06 05:36:20

您可以使用ExpandoObject:

代码语言:javascript
复制
dynamic data = new ExpandoObject();
data.frames = yourObject;
return Json(data);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51698309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档