gpt4 book ai didi

javascript - 调试 ServiceStack POST 请求反序列化

转载 作者:行者123 更新时间:2023-11-30 18:05:21 26 4
gpt4 key购买 nike

我有一个用例,我使用 jQuery 发布一个包含数组成员的复杂对象。例如:

data: {
obj1: obj1,
arr1: [ ... ]
}

在服务器上我实现了一个 ServiceStack 服务。服务器上的自动请求映射为请求成员生成空值,但如果我提取 Request.GetRawBody(),然后使用 ServiceStack.Text.JsonSerializer.DeserializeFromString,我会得到我需要的。

调试实际的反序列化并查看缺少的内容会很有用。有人知道怎么做吗?

示例:

传入平面对象用几个字段定义一个简单的请求对象:

public class Request
{
public string Name { get; set; }
}

进行 jQuery ajax 调用:

$.ajax({
//...
data: {
name: 'John Doe'
}
});

调用有效,服务器接收到具有“John Doe”名称属性的对象。

用子对象传递对象

public class Request
{
public Caller Caller { get; set; }
}

public class Caller
{
public string Name { get; set; }
}

然后从 jQuery 调用:

$.ajax({
// ...
data: {
caller: {
name: 'John Doe'
}
}
});

调用之后,服务上请求的“caller”属性为“null”,所以这种方式是行不通的。

结论在我最初的评估中,我指的是对象和数组的组合。我想问题在于获取一个简单的子对象来序列化/反序列化。这是否意味着不支持该概念,或者我是否错误地传递了对象?

最佳答案

如果您真的认为实际的反序列化有问题,那么我建议您从 github 下载源代码并尝试创建失败的单元测试。如果您认为它与 json 反序列化有关,请下载 ServiceStack.Text 项目。否则你应该下载主要的 ServiceStack 项目。阅读现有的单元测试可以为整个项目的工作方式提供很多信息。

但是,很可能是无效的 json 表示法。通过将序列化 DTO 的结果与您实际传递给 ajax 调用的结果进行比较,对 json 进行逆向工程通常很有用。

更新:您的 json 应该如下所示:

{"Caller":{"Name":"John Doe"}}

检查这一点的简单方法是执行以下操作:

var r = new MyRequest() {Caller = new Caller() {Name = "John Doe"}};
var json = r.ToJson();

关于javascript - 调试 ServiceStack POST 请求反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com