servicestack,Json,Ember.js,servicestack" /> servicestack,Json,Ember.js,servicestack" />

如何使ServiceStack v3符合jsonapi.org标准?

如何使ServiceStack v3符合jsonapi.org标准?,json,ember.js,servicestack,Json,Ember.js,servicestack,我正在尝试使用带有ServiceStack v3后端的Ember.js前端。我遇到的问题是,根据jsonapi.org标准,Ember数据需要JSON,如下所示: [{"clients": [ {"clientID":80,"name":"Test Client 6","acronym":"TCL6","website":"http://www.tcl6.com"}, {"clientID":81,"name":"Test Client 7","acron

我正在尝试使用带有ServiceStack v3后端的Ember.js前端。我遇到的问题是,根据jsonapi.org标准,Ember数据需要JSON,如下所示:

[{"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"}]
迫使我在前端实现自定义逻辑,将数据“按摩”成适当的格式。我希望避免在客户端执行此转换,并将其直接实现到后端的响应中

如有任何协助或指示,将不胜感激


谢谢

您可以实现一个序列化程序,如下所示:

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

您可以告诉ServiceStack的JSON序列化程序发出
camelCase
属性名,其中包含:

JsConfig.EmitCamelCaseNames = true;
您还需要使用与要返回的JSON形状匹配的类型,例如:

public class JsonApiClients
{
    public List<Client> Clients { get; set; }
}
公共类jsonapiclient
{
公共列表客户端{get;set;}
}

这是我最初计划采取的方向,但我更愿意在服务器端实现逻辑。不管是哪种方式,都要感谢repsonse。利用Ember的适配器和序列化程序可以使您的代码在5分钟内工作,并给您时间修复后端:)此外,它向您证明了代码将与您定义的API一起工作:)但是,如果没有其他工具使用您的API,那么在服务器端实现它总是很好的!!我猜我需要实现一个自定义序列化程序,以将返回的JSON数组包装为合适的类型?@slashp我已经更新了这个问题,您还需要使用与您想要返回的形状匹配的模型。