向REST API中的序列化对象添加“标准”JSON字段

向REST API中的序列化对象添加“标准”JSON字段,json,rest,asp.net-web-api,json.net,Json,Rest,Asp.net Web Api,Json.net,受此启发,我想在RESTAPI中插入一点自定义序列化逻辑。我正在使用WebAPI 2和JSON.NET。我的目标是将响应的“有效负载”包装在主JSON响应的“数据”字段中,如样式指南中所述,在每个响应中包括一个apiVersion字段,诸如此类。当然,控制器操作只返回直接的POCO,我想修改它们发送到其中的容器,而不是POCO本身,因此: { "id": "111", "apiVersion": "1.0", "data": { "kind": "monkey", "

受此启发,我想在RESTAPI中插入一点自定义序列化逻辑。我正在使用WebAPI 2和JSON.NET。我的目标是将响应的“有效负载”包装在主JSON响应的“数据”字段中,如样式指南中所述,在每个响应中包括一个apiVersion字段,诸如此类。当然,控制器操作只返回直接的POCO,我想修改它们发送到其中的容器,而不是POCO本身,因此:

{
  "id": "111",
  "apiVersion": "1.0",
  "data": {
    "kind": "monkey",
    "name": "manny",
    "age": "3"
  },
  "error": null
}
…这类事情。因此,我设想在每个响应通过连接之前插入少量的标准数据。实现这一目标的最佳方式是什么

TIA。

我相信您可以使用ActionFilterAttribute来实现这种行为。您首先需要创建一个类来表示包装的响应。所有属性都是字符串,请根据需要进行调整:

public class WrappedJsonResponse
{
    public string Id {get;set;}
    public string ApiVersion {get;set;}
    public object Data {get;set;}
    public string Error {get;set;}
}
ActionFilterAttribute允许您在通过虚拟方法执行操作后执行一些处理:

使用该属性,您可以选择将其应用于需要整个控制器、仅操作或作为默认过滤器的位置

注意:我目前没有访问开发环境的权限,也没有测试过滤器。如果这还不完整,它至少应该给你一个如何完成的想法。

我相信你可以使用ActionFilterAttribute来实现这种行为。您首先需要创建一个类来表示包装的响应。所有属性都是字符串,请根据需要进行调整:

public class WrappedJsonResponse
{
    public string Id {get;set;}
    public string ApiVersion {get;set;}
    public object Data {get;set;}
    public string Error {get;set;}
}
ActionFilterAttribute允许您在通过虚拟方法执行操作后执行一些处理:

使用该属性,您可以选择将其应用于需要整个控制器、仅操作或作为默认过滤器的位置


注意:我目前没有访问开发环境的权限,也没有测试过滤器。如果这还不完整,至少应该给你一个如何完成的想法。

明白了。对于一个现成的解决方案,它是正确的标记!谢谢,就这样。对于一个现成的解决方案,它是正确的标记!谢谢