0

次のようなサービスがあります。

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "DoWork", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Person DoWork(Person person);
}

サービスの実装は次のとおりです。

public class Service : IService
{
    public Person DoWork(Person person)
    {
        //To do required function
        return person;
    }
}

私のPerson型定義は次のとおりです。

 [DataContract]
 public class Person
 {
    [DataMember]
    public string Name { get; set; }       
 }

jQueryを使用してこのサービスを利用しようとしています:

   var data = { 'person': [{ 'Name': 'xxxxx'}] };

   $.ajax({
            type: "POST", 
            url: URL, // Location of the service
            data: JSON.stringify(data), //Data sent to server
            contentType: "application/json", // content type sent to server
            dataType: "json", //Expected data format from server
            processData: false,
            async: false,
            success: function (response) {                 
            },
            failure: function (xhr, status, error) {                   
                alert(xhr + " " + status + " " + error);
            }
        });

これを使用してサービスを呼び出すことはできますが、サービス メソッドのパラメーター (Personオブジェクト)DoWorkは常に NULL です。どうすればこれを修正できますか?

4

1 に答える 1

1

JavaScriptdataオブジェクトが正しく構成されていません。次のようにする必要があります。{ 'person': { 'Name': 'xxxxx' } }

さらに、JavaScript オブジェクトを作成する別の方法を選択できます。解決策 (私の意見では、エラーが発生しにくい) は、より標準的な方法でオブジェクトを作成することです (コードが少し増えますが、混乱して間違いを犯す可能性は少なくなります - 特にオブジェクトが非常に複雑な場合):

var data = new Object();
data.person = new Object();
data.person.Name = "xxxxx";

最後に、サービス操作との間で送受信されるメッセージの本文スタイルを設定していません。

[WebInvoke(... BodyStyle = WebMessageBodyStyle.Wrapped)]
于 2013-07-10T10:21:04.267 に答える