Если вы хотите создать операцию WCF для получения этого ввода JSON, вам необходимо определить контракт данных, который сопоставляется с этим вводом. Есть несколько инструментов, которые делают это автоматически, в том числе один, который я недавно написал на http://jsontodatacontract.azurewebsites.net/ (подробнее о том, как был написан этот инструмент, см. на странице этой записи в блоге). Инструмент сгенерировал этот класс, который вы можете использовать:
// 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;
}
Затем вам нужно определить контракт операции, чтобы получить это. Поскольку JSON должен идти в теле запроса, наиболее естественным для использования методом HTTP является POST
, поэтому вы можете определить операцию, как показано ниже: метод «POST» и стиль «Bare» (что означает, что ваш JSON сопоставляется непосредственно с параметром). Обратите внимание, что вы даже можете опустить свойства Method
и BodyStyle
, поскольку "POST"
и 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;
}
Теперь в методе у вас есть ввод, сопоставленный с lookupPerson
. Как вы будете реализовывать логику вашего метода, зависит от вас.
Обновить после комментария
Один из примеров вызова службы с помощью JavaScript (через jQuery) можно найти ниже.
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));
}
});
person
carlosfigueira
schedule
17.12.2012