Jeśli chcesz utworzyć operację WCF do odbioru tego wejścia JSON, musisz zdefiniować umowę danych, która mapuje do tego wejścia. Istnieje kilka narzędzi, które robią to automatycznie, w tym jeden, który napisałem jakiś czas temu pod numerem http://jsontodatacontract.azurewebsites.net/ (więcej szczegółów na temat tego, jak to narzędzie zostało napisane pod this blog post). Narzędzie generowane tej klasy, które można użyć:
// 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;
}
Następnie trzeba zdefiniować umowę pracy do otrzymania tego. Ponieważ JSON musi wejść w treść żądania, najbardziej naturalną metodą HTTP jest POST
, więc możesz zdefiniować operację jak poniżej: metoda "POST" i styl "Bare" (co oznacza, że JSON mapuje bezpośrednio do parametru). Zauważ, że możesz nawet pominąć właściwości Method
i BodyStyle
, ponieważ wartości domyślne to "POST"
i WebMessageBodyStyle.Bare
).
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public Person FindPerson(Peron lookUpPerson)
{
Person found = null;
// Implementation that finds the Person and sets 'found'
return found;
}
Teraz, w metodzie masz wejście mapowane na lookupPerson
. Sposób, w jaki wdrożysz logikę swojej metody, zależy od Ciebie.
Aktualizacja po komentarzu
Jednym z przykładów wywoływania usługi przy użyciu JavaScript (przez jQuery) można znaleźć poniżej.
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));
}
});
Zobacz http://stackoverflow.com/questions/13165533/deserialize-json-object-sent-from-android-app-to-wcf-webservice –
Jaki język używasz wezwać serwis? JavaScript, C#, coś jeszcze? – carlosfigueira