Nếu bạn muốn tạo một hoạt động WCF để nhận được đầu vào JSON đó, bạn sẽ cần phải xác định một hợp đồng dữ liệu ánh xạ tới đầu vào đó. Có một vài công cụ tự động làm điều đó, bao gồm một công cụ mà tôi đã viết một lúc trở lại tại http://jsontodatacontract.azurewebsites.net/ (chi tiết hơn về cách công cụ này được viết tại this blog post). Công cụ tạo lớp này, bạn có thể sử dụng:
// Type created for JSON at <<root>>
[System.Runtime.Serialization.DataContractAttribute()]
public partial class Person
{
[System.Runtime.Serialization.DataMemberAttribute()]
public int age;
[System.Runtime.Serialization.DataMemberAttribute()]
public string name;
[System.Runtime.Serialization.DataMemberAttribute()]
public string[] messages;
[System.Runtime.Serialization.DataMemberAttribute()]
public string favoriteColor;
[System.Runtime.Serialization.DataMemberAttribute()]
public string petName;
[System.Runtime.Serialization.DataMemberAttribute()]
public string IQ;
}
Tiếp theo, bạn cần xác định hợp đồng hoạt động để nhận điều đó. Vì JSON cần phải đi vào phần thân của yêu cầu, phương thức HTTP tự nhiên nhất để sử dụng là POST
, vì vậy bạn có thể xác định hoạt động như sau: phương thức là "POST" và kiểu "Bare" (có nghĩa là JSON ánh xạ trực tiếp đến tham số). Lưu ý rằng bạn thậm chí có thể bỏ qua các thuộc tính Method
và BodyStyle
, vì "POST"
và WebMessageBodyStyle.Bare
là các giá trị mặc định của chúng tương ứng).
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public Person FindPerson(Peron lookUpPerson)
{
Person found = null;
// Implementation that finds the Person and sets 'found'
return found;
}
Bây giờ, tại phương pháp bạn đã nhập ánh xạ tới lookupPerson
. Làm thế nào bạn sẽ thực hiện logic của phương pháp của bạn là tùy thuộc vào bạn.
Cập nhật sau khi bình luận
Một ví dụ về cách gọi dịch vụ sử dụng JavaScript (thông qua jQuery) có thể được tìm thấy dưới đây.
var input = '{
"age":100,
"name":"foo",
"messages":["msg 1","msg 2","msg 3"],
"favoriteColor" : "blue",
"petName" : "Godzilla",
"IQ" : "QuiteLow"
}';
var endpointAddress = "http://your.server.com/app/service.svc";
var url = endpointAddress + "/FindPerson";
$.ajax({
type: 'POST',
url: url,
contentType: 'application/json',
data: input,
success: function(result) {
alert(JSON.stringify(result));
}
});
Xem http://stackoverflow.com/questions/13165533/deserialize-json-object-sent-from-android-app-to-wcf-webservice –
Ngôn ngữ mà bạn đang sử dụng để gọi dịch vụ? JavaScript, C#, cái gì khác? – carlosfigueira