複雑な JSON オブジェクトを MVC 4 コントローラー アクションに渡そうとして問題が発生しています。JSON コンテンツは可変であるため、MVC で JSON の個々のプロパティ/要素をアクション メソッドのパラメーター リスト内のパラメーターにマップしたくありません。コントローラー アクションで単一の JSON 文字列パラメーターとしてデータを取得したいだけです。
私のアクションメソッドの署名は次のとおりです。
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(string jsonOfLog)
そして、これが私のブラウザからいくつかのJSONデータを投稿しようとする私の試みです:
data = {prop: 1, myArray: [1, "two", 3]};
//'data' is much more complicated in my real application
json = {jsonOfLog: data};
$.ajax({
type: 'POST',
url: "Home/ConvertLogInfoToXml",
data: JSON.stringify(json),
success: function (returnPayload) {
console && console.log ("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log ("request failed");
},
dataType: "xml",
contentType: "application/json",
processData: false,
async: false
});
ConvertLogInfoToXML メソッドの先頭でブレークポイントに到達すると、jsonOfLog が null になります。
JavaScript で設定されている「json」変数を変更して、jsonOfLog プロパティを単純な文字列にすると、次のようになります。
json = { jsonOfLog: "simple string" };
次に、ConvertLogInfoToXML メソッドの先頭にあるブレークポイントに到達すると、jsonOfLog が文字列の値になります (たとえば、「単純な文字列」)。
アクション メソッドの jsonOfLog パラメータの型をオブジェクト型に変更してみました。
[HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(object jsonOfLog)
ここで、元の JavaScript コード (より複雑な「データ」オブジェクトを渡しています) を使用すると、jsonOfLog は {object} の値を取得します。しかし、デバッガーはウォッチ ウィンドウにそれ以上の詳細を表示しません。また、この変数を操作するためにどのメソッドを使用できるかわかりません。
渡されたデータが文字列化された複雑なオブジェクトである場合、JSON データを MVC コントローラーに渡すにはどうすればよいですか?
ありがとう、ノートル