2009-05-01 6 views
4

次のコードのJSON応答は、以下のように間違ってエスケープされます。[WebMethod]を使用してJSON応答をエスケープしました

私のWebMethod属性は、このようなものです:コンソールから

[WebMethod (Description="doc here")] 
    [ScriptMethod(ResponseFormat=ResponseFormat.Json)] 
    public string responseMyObject() { 
      if (!Setup()) return ""; 

      ... 
      Proxy pu = new Proxy(...); 
... 

      string toReturn = JavaScriptConvert.SerializeObject(pu.getMyObject()); 
      Console.WriteLine(toReturn); 
      return toReturn; 
    } 

私が手:JSから

{"field1":vaule1,"field2":value2} 

$.ajax({ 
    type: "POST", 
    url: "/myapi/myClass.asmx/responseMyObject", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
        var object = msg.d; 
        alert(object.field1); 
    } 
}); 

問題は、HTTPレスポンスヘッダ内のI次のようにJSON応答が間違って(?)エスケープされていることがわかります:

私は[WebMethod属性]の基本的なタイプを返す呼び出した場合、同様のコードで

{"field1":value1,"field2":value2} 

:{... D}奇妙何

{"d":"{\"field1\":value1,\"field2\":value2}"} 

は、コンソールのプリントがファイン(まだ中にカプセル化されていないということです(オブジェクトなし)、JSON応答はOKです。同様に:

{ "D":8080}

+1

JSONが間違っていない、それはそれはあなたのJSON(String)を撮影しています –

+1

正しくエスケープおよびJSONオブジェクトラッパー –

+0

にそれをラップされている、あなたは私達に詳細を与えることができます –

答えて

3

なぜあなたはJavaScriptConvert.SerializeObjectを呼び出していますか?

あなたのメソッドの戻り値の型をpu.getMyObject()が返す型に変更するだけでは、フレームワークは残りの処理を行うことができませんか?

あなたがメソッドから返されたときに、私は(フレームワークは、その文字列をシリアル化され、その後、あなたはJSON形式にあなたのオブジェクトをシリアル化していると思う瞬間つまり

...

[WebMethod (Description="doc here")]  
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]  
public MyObjectType responseMyObject() 
{ 
    Proxy pu = new Proxy(...); 

    ... 

    return pu.GetMyObject(); 
} 

JASON形式のデータを含む)をJSON形式に変換します。あなたはJSONシリアライザを必要といけない

+0

これで、getMyObject()によって返される型が返されました。レスポンスは空です{} –

6
[WebService] 
[ScriptService] 
public class MyWebService : WebService 
{  

    [WebMethod (Description="doc here")]  
    [ScriptMethod(UseHttpGet=false, ResponseFormat=ResponseFormat.Json)]  
    public MyObjectType responseMyObject() 
    { 
     Proxy pu = new Proxy(...); 

     return pu.GetMyObject(); 
    } 

} 

、ScriptService属性でそれをタグ付けすることは、JSONをシリアライズする能力を結ぶできます。あなたはJSONをシリアライズして、再びそれをシリアライズ事前た:(

+0

レスポンスは空です{} –

+0

あなたのオブジェクトは実際にプロパティを持っていますか?そしてSystem.Web.Extensionsをインストールしましたか?3.5 sp1はたくさんのものを追加します –

+0

あなたの名前フィールド1は、 、プロパティに変更し、それを行ってください –

関連する問題