1

私はjqGridを使用しており、使用してgetRowDatajqGridデータを取得しています。その後、私は申請しJSON.stringify(rowData)ており、最終的に次のような結果が得られます。

[
    {
        "FIRST_NAME": "Krish",
        "LAST_NAME": "Patil",
        "EMPLOYEE_TYPE": "Consultant",
        "TITLE": "Application Resource",
        "LOCATION": "USA ",
        "CENTER_NAME": "Application Development & Testing",
        "EMAIL": "goal@test.com",
        "COMMENTS": "testing"
    }
]

「JavaScript」で期待どおりに動作しています。"CENTER_NAME":"Application Development .. ただし、このデータをコントローラーに送信して逆シリアル化しようとすると、「&」(特殊文字) が原因で未終了文字列エラーが発生します。これを解決するにはどうすればよいですか、同じことについてアドバイスをお願いします。

------デシリアライゼーション コード ------------

 JavaScriptSerializer ser = new JavaScriptSerializer();
 UserData result = ser.Deserialize<UserData>(userData);
4

1 に答える 1

0

使用するタイプを確認することをお勧めしますuserData。使用している完全な ASP.NET MVC コードを投稿していません。データ (変数userData) は、ASP.NET MVC によって既にオブジェクトに逆シリアル化されていると思います。JSON 仕様 (こちらを参照) は非常に単純です。"および\文字のみをエスケープする必要があります。エスケープできる他の文字がいくつかあります(/たとえば)。文字JavaScriptSerializerの処理が間違っているバグがあるとは思えません。&

UPDATED : コードで考えられるバグの 1 つUserData使用するクラスです。おそらくコードは

List<UserData> result = ser.Deserialize<List<UserData>>(userData);

それ以外の

UserData result = ser.Deserialize<UserData>(userData);

アイテムの配列を送信するためです。いずれにせよ、コードを含むプログラム

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace DeserializationTest {
    public class UserData {
        public string FIRST_NAME;
        public string LAST_NAME;
        public string EMPLOYEE_TYPE;
        public string TITLE;
        public string LOCATION;
        public string CENTER_NAME;
        public string EMAIL;
        public string COMMENTS;
    };

    class Program {
        static void Main () {
            const string userData = "[{\"FIRST_NAME\": \"Krish\",\"LAST_NAME\": \"Patil\",\"EMPLOYEE_TYPE\": \"Consultant\",\"TITLE\": \"Application Resource\",\"LOCATION\": \"USA \",\"CENTER_NAME\": \"Application Development & Testing\",\"EMAIL\": \"goal@test.com\",\"COMMENTS\": \"testing\"}]";
            var ser = new JavaScriptSerializer();
            var result = ser.Deserialize<List<UserData>>(userData);
            Console.WriteLine("result[0].CENTER_NAME={0}", result[0].CENTER_NAME);
        }
    }
}

例外なく動作し、コンソールに次のテキストが表示されます。

result[0].CENTER_NAME=Application Development & Testing
于 2013-06-28T09:30:57.860 に答える