从客户端发送的数据不会反序列化.
客户:
$.ajax({ type: 'POST',dataType: "json",url: 'savecommentsservice',data: { "Pid": 0,"Comments": [{ "User": "bbbbbb","Text": "aaaaaaaa" },{ "User": "ddddddd","Text": "ccccccccc"}] },
DTO:
public class Comment { public string User { get; set; } public string Text { get; set; } } public class SaveCommentsRequest { public int Pid { get; set; } public string SiteId { get; set; } public string Column { get; set; } public List<Comment> Comments { get; set; } }
服务器:
Routes.Add<SaveCommentsRequest>("/savecommentsservice"); ... public object Execute(SaveCommentsRequest request) { // Why is request.Comments null !!! All other params of the request works fine // THe string I'm putting in is generated below - just to make sure its correct request.Comments = new List<Comment>(); request.Comments.Add(new Comment { Text = "aaaaaaaa",User = "bbbbbb" }); request.Comments.Add(new Comment { Text = "ccccccccc",User = "ddddddd" }); var thisIsWhatIPutInto$AjaxCall = JsonSerializer.SerializeToString<SaveCommentsRequest>(request);
任何想法有什么不对?为什么没有填充Comments数组.正如您从注释中看到的那样,我使用servicestack json序列化器生成了字符串.
也许我在这里想念一些?
编辑
当看到小提琴手传来的时候,我看到了这个:
POST http://localhost:4920/savecommentsservice HTTP/1.1 Host: localhost:4920 User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 Accept: application/json,text/javascript,*/*; q=0.01 Accept-Language: zh,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Connection: keep-alive Content-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequest Referer: http://localhost:4920/default.cshtml?viewId=3 Content-Length: 227 Cookie: ASP.NET_SessionId=slbw453revfgmwuuxyrim1an Pragma: no-cache Cache-Control: no-cache SiteId=Site1&Pid=0&Column=C6&Comments%5B0%5D%5BUser%5D=bbbbbb&Comments%5B0%5D%5BText%5D=aaaaaaaa&Comments%5B1%5D%5BUser%5D=ddddddd&Comments%5B1%5D%5BText%5D=ccccccccc&Comments%5B2%5D%5BUser%5D=ggggggg&Comments%5B2%5D%5BText%5D=
在萤火虫:
Parametersapplication/x-www-form-urlencoded Column C6 Comments[0][Text] aaaaaaaa Comments[0][User] bbbbbb Comments[1][Text] ccccccccc Comments[1][User] ddddddd Comments[2][Text] Comments[2][User] ggggggg Pid 0 SiteId SiteId0 Source SiteId=SiteId0&Pid=0&Column=C6&Comments%5B0%5D%5BUser%5D=bbbbbb&Comments%5B0%5D%5BText%5D=aaaaaaaa&Comments%5B1%5D%5BUser%5D=ddddddd&Comments%5B1%5D%5BText%5D=ccccccccc&Comments%5B2%5D%5BUser%5D=ggggggg&Comments%5B2%5D%5BText%5D=
问候
Larsi
解决方法
正如您在默认情况下所看到的,jQuery的Ajax将其提交为“application / x-www-form-urlencoded”,这是默认的HTML Form Post Content-Type.不幸的是,它不能很好地处理嵌套对象,而ServiceStack将期望
JSV Format中的嵌套对象.
因此,对于复杂类型/嵌套对象,您希望告诉jQuery将请求作为JSON发送,您可以通过指定contentType:application / json参数来执行此操作,例如:
var data = { "Pid": 0,"Text": "aaaaaaaa" }]}; $.ajax({ type: 'POST',contentType: "application/json",data: JSON.stringify(data) );