2017-05-15 2 views
0

複数のコードビハインドwebmethod機能を持つWebフォームページを、コントローラ付きのMVCビューに変換しようとしています。JSONをMVCコントローラからwebmethodに戻す

私が返すデータは異なります。彼らは適切にJSONをフォーマットしているが、WebMethod属性は次のようにJSONを返す:

{"d":"{\"Success\":true,\"Data\":{\"QuoteId\":340439,\"LoginId\":40, 

とコントローラが戻る:JavaScriptで処理するように設定されているよう

"{\"QuoteId\":340444,\"LoginId\":40, 

そのはdata.dでそれをラップではないし、 SuccessまたはDataオブジェクトはありません。そして、私がwebmethodと同じように($.parseJSON(data))解析しようとすると、それは私に1行目のメッセージの古いエラーを与えます。

私は十分に遊んだとすれば、データが通っている方法で動作させることができると確信していますが、将来私が秘密にする必要のあるページがたくさんあります。コントローラーにwebmethodのようにフォーマットさせる簡単な方法があります。

なぜ私はデータが異なってフォーマットされているのか分かりますが、同じ方法でデータを返すことができれば、私の人生は楽になります。私はJsonConvert.SerializeObject(obj)を返そうとしましたが、これは単なる文字列であり、Return Json(obj)は私が推測しているのは単なる文字列ですが、両方とも同じ、非data.dの方法で返すものです。

+1

これまで返されていたのと同じJSONを返すようにするには、レスポンスを折り返す新しいオブジェクトを作成しないでください。 'publicクラスJsonResponseWrapper {public bool Success {get; set;}パブリックオブジェクトData {get; set;}} 'これらの行に沿った何か。 – mason

+0

@mason私はそれを試みてきましたが、何らかの理由でデータを同じようにフォーマットしていません。私はそれを本質的に "見て"得ることができますが、webmethodがないJSの行の下にエラーを投げます。 –

答えて

0

これでデータを "d"にラップすることにしました。その結果、Ajaxの結果に "data.d"を入れることができます。

しかし、私はちょうど経由して戻ってデータを送信する際に、日付が正しくフォーマットされていない何らかの理由:彼らは奇妙判明

return Json(thewrappeddata); 

だから基本的に私は何をすべきか、このです:

私は(私はそれがシリアライズTHINK) Json()で一度 JsonConvert.SerializeObject()とし、1回、2回、ここでデータを「jsonifying」てるように思え
public class JSONReturn { 
    public object d; 
    public static object Wrap(object data) { 
     return new JSONReturn() { d = data }; 
    } 
} 

var thedata = new TonsofData(); 

return Json(
    JSONReturn.Wrap(
     JsonConvert.SerializeObject(thedata, 
      new JsonSerializerSettings { 
       ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore 
      } 
     ) 
    ) 
); 

が、それはうまくいくように思えますし、今は私が必要とするものを手に入れ、JSは以前と同じように動作します。 JsonConvert.SerializeObject()を省略した場合、Json()は日付を間違ってフォーマットし、あらゆる種類のエラーを発生させます。

関連する問題