如何使ServiceStack v3符合jsonapi.org标准?
我正在尝试使用带有ServiceStack v3后端的Ember.js前端。我遇到的问题是,根据jsonapi.org标准,Ember数据需要JSON,如下所示:如何使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
[{"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我已经更新了这个问题,您还需要使用与您想要返回的形状匹配的模型。