2

我在获取用 Node.js 编写的休息客户端以能够将数据(通过 GET)发送到基于 JSON 的 ServiceStack 服务时遇到问题。它给了我一个序列化错误。但是,我已将相同的 JSON(由我的 Node.js REST 客户端生成)复制并粘贴到通过 CURL 发送的对 ServiceStack 服务的调用中,并且 ServiceStack 对 JSON 没有问题——再次......仅作为只要它来自 CURL。

任何人都可以提供的任何指示或进一步的启示将不胜感激!

谢谢,

塔米

4

1 回答 1

6

所以我想出了如何在 Node.js 中而不只是在 CURL 中(向 ServiceStack JSON 服务发送/接收 JSON)。

我做了以下事情:

  • 使用“restler”包作为我的 http 通信包装器
  • 使用restler的“get()”方法...不要使用“json()”方法
    (代码片段如下...)

    var obj = {};
    obj.objectName = 'foo';
    obj.foos = [{firstname: 'foo1', lastname: 'foo-you'}, {firstname: 'foo2', lastname: 'foo-you-2'}];
    var json = JSON.stringify(obj);
    var options = {
        method: "get",
        data: json,
        headers: {'Content-type': 'application/json', 'Accept': 'application/json'}
    };
    rest.get('http://localhost/servicestack-api/getmethod', options).
        on('complete', function(data, response){
            console.log(data);
            console.log(response.statusCode);
    
        });
    
  • 确保在上面填写正确的 url 和远程 DTO 到您的 ServiceStack 服务和方法

供参考

如果您的 json 没有序列化到 ServiceStack 中的远程 DTO,一种快速的测试方法是将存储在上面“json”变量中的 json 复制并粘贴到 curl 命令中,以查看它是否以这种方式正确序列化。
(下面的示例卷曲片段......)

这就是我最初所做的(请参阅原始问题)以尝试解决序列化问题。它帮助我将问题隔离到 restler/Node.js 方面,因此我可以进行您在上面看到的修改——即不使用 restler 的“json()”方法。

    curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '{"foos":[{"firstname":"foo1","lastname":"foo-you"}, {"firstname": "foo2", "lastname": "foo-you-2"}],"objectName": "foo"}' http://localhost/servicestack-api/getmethod
于 2012-11-10T03:45:31.467 回答