1

非常に多くの json シリアライズ/デシリアライズ オプションがあるため、どれを使用するのが正しいのか、一見同じことを行うオプションが非常に多くある理由がわかりません。JsonConvert、JsonSerializer、JavaScriptSerializer、その他いくつかを見てきました。

json 配列を複雑なオブジェクトの ac# リストに正しく逆シリアル化するためのヘルプを探しています。

Jクエリ:

 var users = [];
    for (var i = 0; i < response.length; i++) 
    {
        var u = 
        {
            Id: response[i].id,
            UserName: response[i].username,
            FirstName: response[i].first_name,
            LastName: response[i].last_name    
        };
        users[i] = u;
    }

    var ul = JSON.stringify({ 'userlist': users});
    $.ajax({
        type: "POST",
        url: "/myurl/addusers",
        data: { 'userlist': ul },
        dataType: "json",
        success: function (response) {  

        },
        error: function (xhr, status, error) {

        }
    });

C# (これは機能しません):

        [HttpPost]
        public ActionResult AddUsers(string userlist)
        {
            JavaScriptSerializer ser = new JavaScriptSerializer();
            var users = ser.Deserialize<List<User>>(userlist); 
            ...
        }  

    [Serializable]
    public class User
    {
        public string Id { get; set; }
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
4

2 に答える 2

3

この方法を試してください:

var ul = JSON.stringify({ 'userlist': users});
    $.ajax({
        type: "POST",
        url: "/myurl/addusers",
        data: ul ,
        content-Type: 'application/json; charset=utf-8', 
        dataType: "json",
        success: function (response) {  

        },
        error: function (xhr, status, error) {

        }
    });

すでにuserlistjsonで設定しているulので、再度ラップせずにデータに直接割り当て、ajax設定でuserlistcontentTypeも設定します。content-Type: 'application/json; charset=utf-8'

また、アクションで次を使用します。

    public ActionResult AddUsers(List<User> userlist)
    {
     //no need to do JavaScriptSerializer 
于 2013-07-11T16:00:39.380 に答える
1

ユーザーのリストを受け入れるようにアクションを変更すると、モデル バインダーが残りを次のように処理します。

 [HttpPost]
        public ActionResult AddUsers(List<User> users)
        {
            //use the 
        }

サロゲート プロパティなしで、users 配列を直接送信するように JavaScript を変更します。

var ul = JSON.stringify(users);
    $.ajax({
        type: "POST",
        url: "/myurl/addusers",
        data: ul ,
        dataType: "json",
        success: function (response) {  

        },
        error: function (xhr, status, error) {

        }
    });
于 2013-07-11T16:07:55.413 に答える