そのJSON入力を受け取るWCF操作を作成する場合は、その入力にマップするデータコントラクトを定義する必要があります。これを自動的に行うツールがいくつかあります。その中には、しばらく前に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を介して)サービスを呼び出す1つの例を以下に示します。
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));
}
});