【问题标题】:How can I make ServiceStack v3 conform to jsonapi.org standards?如何使 ServiceStack v3 符合 jsonapi.org 标准?
【发布时间】:2015-01-15 15:30:57
【问题描述】:

我正在尝试将 Ember.js 前端与 ServiceStack v3 后端结合使用。我遇到的问题是 Ember Data 期望 JSON 根据 jsonapi.org 标准,如下所示:

[{"clients":
    [
       {"clientID":80,"name":"Test Client 6","acronym":"TCL6","website":"http://www.tcl6.com"},  
       {"clientID":81,"name":"Test Client 7","acronym":"TCL7","website":"http://www.tcl7.com"}
    ]
}] 

但ServiceStack将数据序​​列化为以下内容:

[{"ClientID":80,"Name":"Test Client 6","Acronym":"TCL6","Website":"http://www.tcl6.com"},
 {"ClientID":81,"Name":"Test Client 7","Acronym":"TCL7","Website":"http://www.tcl7.com"}]

迫使我在前端实现自定义逻辑,以将数据“按摩”成适当的格式。我想避免在客户端执行此转换并将其直接实现到后端的响应中。

任何帮助或指导将不胜感激。

谢谢!

【问题讨论】:

    标签: json ember.js servicestack


    【解决方案1】:

    您可以告诉 ServiceStack 的 JSON 序列化器发出 camelCase 属性名称:

    JsConfig.EmitCamelCaseNames = true;
    

    您还需要使用与您要返回的 JSON 形状相匹配的类型,例如:

    public class JsonApiClients
    {
        public List<Client> Clients { get; set; }
    }
    

    【讨论】:

    • 谢谢黛米斯!!我猜我需要实现一个自定义序列化程序来将返回的 JSON 数组包装成适当的类型?
    • @slashp 我已经更新了问题,您还需要使用与您想要返回的形状相匹配的模型。
    【解决方案2】:

    你可以实现一个序列化器,像这样:

    App.ClientSerializer = DS.RESTSerializer.extend({
        normalizePayload: function(payload) {
          return {
            "client": payload
          };
        }
    });
    

    【讨论】:

    • 这是我一开始打算采取的方向,但我宁愿实现逻辑服务器端。无论哪种方式,感谢您的回复。
    • 利用 Ember 的适配器和序列化程序可以让您的代码在 5 分钟内运行,并让您有时间修复后端 :) 此外,它可以证明代码可以与您定义的 API 一起使用 :)
    • 不过,如果没有其他工具使用您的 API,最好在服务器端实现它
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多