如何从WebAPI 2发送命名的JSON对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (125)

目前,我的Web API将JSON数据作为UNNAMED对象数组发送,如下所示:

[
  {
    "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);
        }
    }
提问于
用户回答回答于

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

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() };
用户回答回答于

你可以使用ExpandoObject:

dynamic data = new ExpandoObject();
data.frames = yourObject;
return Json(data);

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励