Dữ liệu được gửi từ máy khách sẽ không được deserialized.Không thể deserialize mảng
Chủ đầu tư:
$.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; }
}
Server:
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);
Bất cứ ý tưởng gì sai? Tại sao mảng Nhận xét không được điền. Như bạn có thể thấy từ các ý kiến tôi đã tạo ra chuỗi với serial serial servicestack.
Có thể tôi đang thiếu một số nội dung xấu hổ ở đây?
EDIT Khi nhìn vào cáy whats beeing truyền Tôi thấy điều này:
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=
Và trong firebug:
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=
Trân
Larsi
Xin chào! Trước hết, cảm ơn cho một khuôn khổ tuyệt vời. Xin lỗi vì trả lời muộn. Thiết lập contentType thành application/json cho tôi ngoại lệ: "Định nghĩa kiểu sẽ bắt đầu bằng '{', mong đợi kiểu tuần tự 'SaveCommentsRequest', nhận chuỗi bắt đầu bằng: Pid = 0 & Comments% 5B0 ..." Mọi thứ tôi nên thay đổi trong dịch vụ ? – Larsi
Xin chào, chỉ cần nhận ra ** dữ liệu ** cần được tuần tự hóa dưới dạng JSON bằng cách sử dụng 'JSON.stringify()' vì jQuery không tự động làm điều đó cho bạn và gửi nó trong ** application/x-www-form-urlencoded ** ContentType theo mặc định, ngay cả khi bạn chỉ định contentType JSON. Dù sao sửa đổi câu trả lời để làm việc. – mythz