【解決方法】ASP.NET MVC コントローラーで JSON javascriptserializer を使用したシリアル化または逆シリアル化中のエラー

プログラミングQA

[ad_1]

画像をbase_64形式でデータベースに保存しました。 Ajax を使用してコントローラーから html にそのデータを取得します。 コントローラーからレコードをフェッチしているときに、カスタム フィルターの例外で次のエラーが発生します。

JSON JavaScriptSerializer を使用したシリアル化または逆シリアル化中にエラーが発生しました。 文字列の長さが maxJsonLength プロパティで設定された値を超えています。

cshtml – 呼び出された Ajax:

function imagepop(no) {
     $.ajax({
                type: "POST",
                contentType: 'application/x-www-form-urlencoded;charset=UTF-8',
                url:"/Controller/GetImage",
                //data: arr,
                data: { 'No': no, 'filetype': obj, 'pageNo': pageNo },
                //dataType: "json",
                success: function (result) {
                    debugger;
                    $("#loader_Prcessing").hide();
                    if (result.Status == "200") {   
                    }
                }
            });
}        

コントローラ:

public JsonResult GetImage(string no, string filetype, string pageNo)
{
    var jsonResult = Json(OutputInfo.lstUploadImgVideoDoc, JsonRequestBehavior.AllowGet);

    jsonResult.MaxJsonLength = int.MaxValue;

    return Json(jsonResult);
}

web.config:

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="2147483647"/>
        </webServices>
    </scripting>
</system.web.extensions>

画像をbase_64形式でデータベースに保存しました。 Ajax を使用してコントローラーから html にそのデータを取得します。 コントローラーからレコードをフェッチしているときに、カスタム フィルターの例外で次のエラーが発生します。

JSON JavaScriptSerializer を使用したシリアル化または逆シリアル化中にエラーが発生しました。 文字列の長さが maxJsonLength プロパティで設定された値を超えています。

cshtml – 呼び出された Ajax:

関数 imagepop(いいえ) {
$.ajax({
タイプ: “ポスト”,
contentType: ‘application/x-www-form-urlencoded;charset=UTF-8’,
url:”/コントローラー/GetImage”,
//データ: arr,
data: { ‘いいえ’: いいえ, ‘filetype’: obj, ‘pageNo’: pageNo },
//dataType: “json”,
成功: 関数 (結果) {
デバッガ;
$(“#loader_Processing”).hide();
if (result.Status == “200”) {
}
}
});
}
コントローラ:

public JsonResult GetImage(string no, string filetype, string pageNo)
{
var jsonResult = Json(OutputInfo.lstUploadImgVideoDoc, JsonRequestBehavior.AllowGet);

jsonResult.MaxJsonLength = int.MaxValue;

Json(jsonResult) を返します。
}
web.config:


<スクリプト>
<ウェブサービス>

構成レベルでこれに対する解決策はありますか? または、コードの変更を最小限に抑えた提案。

私が試したこと:

Googleで提案されているように多くのことを試しましたが、成功しませんでした。これについて助けてください

解決策 1

まず、画像をバイナリ以外の形式でデータベースに保存すると、特に base-64 エンコーディングを使用してバイナリ フィールドにバイトを保存した場合よりも、画像データがかなり大きくなります。

次に、すべてを json 文字列でラップすると、さらに悪化します。

<jsonserialization maxjsonlength="" /> 現在、web.config の値は無視されています。 はい、これを回避する方法があり、あなたはすでにそれを実行しています!

コードの問題は、適切な JsonResult オブジェクトを破棄し、まったく新しいオブジェクトを作成してそれを返すことです。 修正されたコードは次のようになります。

C#
public JsonResult GetImage(string no, string filetype, string pageNo)
{
    var jsonResult = Json(OutputInfo.lstUploadImgVideoDoc, JsonRequestBehavior.AllowGet);

    jsonResult.MaxJsonLength = int.MaxValue;

    return jsonResult;
}

[ad_2]

コメント

タイトルとURLをコピーしました