2011-07-26 15 views
1

JSONオブジェクトをC#オブジェクトにマップするにはどうすればよいですか?JSONオブジェクトをC#オブジェクトにキャストする

var Data = JSON.stringify({ 
        FirstName: "sdfsdf", 
        LastName: "sdfsdf", Age: "sdfsdf", Descrp: "sdfsdf" 
       }); 

たとえば、データを同じプロパティでC#クラスに変換します。
私はこの試みた:

var Data = JSON.stringify({ 
       FirstName: "sdfsdf", 
       LastName: "sdfsdf", Age: "sdfsdf", Descrp: "sdfsdf" 
      }); 
      $.ajax({ 
       type: "POST", 
       url: "Services/CRUD.asmx/CreatePerson", 
       data: Data, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (msg) { 
        alert(msg.d); 

       } 
      }); 

を私は放火犯をチェックすると、このエラーが返されました:あなたは間違いなくそれを行うことができます

{"Message":"Invalid web service call, missing value for parameter: \u0027PersonObj\u0027.","StackTrace":" at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"} 
+0

確かに可能です。 'CreatePerson'のコードを投稿できますか? – ShaneBlake

答えて

4

ていますが、クライアント側のオブジェクトは、サーバーと一致することを確認する必要がありますサイドクラス構造、プロパティ名、およびパラメータ名を正確に示します。

サーバー側のメソッドがPersonObjパラメータを想定しているように聞こえますが、クライアント側でそのように構造化していないようです。あなたのPersonObjパラメータがどのようなタイプ

+0

あなたはあなたの質問に答えるためにアヤックスの教祖を手に入れました。 – abhijit

+0

@ user648372:ありがとうございました。私はそれらの賛辞に耐えられることを願っています! –

1

ですhttp://encosia.com/using-complex-types-to-make-calling-services-less-complex/

var Data = JSON.stringify({ 
    PersonObj: { 
    FirstName: 'foo', 
    LastName: 'bar', 
    Age: 99, 
    Descrp: 'foo person' 
    } 
}); 

私はここ-深さでこのことについて書いている:このような何かを試してみてください?

public class Person 
{ 
    public string FirstName { get;set;} 
    public string LastName { get;set;} 
    public string Age { get;set;} 
    public string Descrp { get;set;} 
} 

あなたのWebサービスメソッドのsignationは次のようになります。: のpublic static 戻り値の CreatePerson(文字列jsonPersonObject){}

そして、あなたのAjaxのデータパラメータは次のようになります。

それはこのような人であると仮定すると、
$.ajax({ 
     type: "POST", 
     url: "Services/CRUD.asmx/CreatePerson", 
     data: {'jsonPersonObject' : Data }, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert(msg.d); 
     } 
}); 

そして、CreatePerson内で、jsonPersonObjectをPersonに解析する必要があります。

これを行う一般的な方法は、Json.NETまたはJavaScriptSerializer from System.Web.Extensions.dllです。あなたのC#の方法があることを確認してくださいあなたのコンテキストobejectを文字列化して

function ajaxCall(funtionname, reqObject, successFn, errorFn, theaspxPage) { 

    var dataObject = JSON.stringify(reqObject); 

    //Call the page method 
    $.ajax({ 
     async: false, 
     type: "POST", 
     url: aspxPage + "/" + fn, 
     contentType: "application/json;", 
     data: "{'reqObject':" + dataObject + "}", 
     dataType: "json", 
     success: successFn, 
     error: errorFn 
    }); 
}; 

この方法を渡す

var context = new object(); 
context.firstname = "sdfsdf"; 
context.lname = "sdfsdf"; 
context.age="sdfsdf"; 
context.descrp= "sdfsdf" 
ajaxCall("functionname", context, ajaxCallSuccess, ajaxCallFailure, "pagename.aspx"); 

使用json2プラグイン:より詳細な情報は、hereまたはhere

+0

ASMXサービス内でオブジェクトを手動でシリアル化またはデシリアライズしないでください。フレームワークは、それを利用すると自動的にこれを行います(入力パラメータをデシリアライズするタイプに設定します):http://encosia.com/asp-net-web-services-mistake-manual- json-serialization/ –

+0

お役立ち情報質問のコンテキストがほとんど与えられていないので、必要なときに回答を残しておきます。 –

1

これを行う見つけることができます静的でオブジェクトを受け入れる パラメータとして渡したい場合は ajaxcallデータ:reqobjectの代わりにdataobject: ''

関連する問題