调试ServiceStack POST请求反序列化
我有一个用例,我发布一个复杂的对象与数组成员使用jQuery。例如:调试ServiceStack POST请求反序列化
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'
}
}
});
呼叫后,对服务请求的“来电显示”属性“空“,所以这种方法是行不通的。
结论 在我原来的评估中,我指的是对象和数组的组合。我想问题是获取一个简单的子对象序列化/反序列化。这是否意味着这个概念不被支持,还是我错误地传递了这个对象?
我想通了这个问题,希望回答帮助他人。事实证明,$。AJAX是发送内容类型编码形式的URL(这是jQuery的文档中明确记载,我刚刚错过了它): http://api.jquery.com/jQuery.ajax/
设置的contentType为“应用/ JSON的”解决了这个问题,现在所有的数据都在服务器上正确反序列化。
如果你真的认为它的实际反序列化有问题,那么我会建议从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();
感谢您的回复。我其实不认为有什么问题,我很确定我做错了什么。我当然不认为反序列化有什么问题,当我简单地反序列化身体时,它正在工作。我试图找出什么是不同的,当对象被映射到请求对象的服务堆栈,并且当身体被手动反序列化时。希望这是有道理的。如果不是,我可以提供代码示例。 – user975060 2013-04-12 02:51:33
我认为这将有助于你提供特定的代码示例。它将在未来为其他人提供更多帮助。 – kampsj 2013-04-12 13:32:26
我已更新原始条目,对不起,花了一段时间。 – user975060 2013-04-24 02:02:10