C# 利用Newtonsoft.Json将json转换为实体对象

转载链接:https://blog.csdn.net/q672405097/article/details/88356515

我的使用案例:

MVC中需要在视图中提交一个数组到控制器,由于提交的数据比较复杂 还需要js处理 ,所以只能用js提交。

数组内容,以如下的形式获取后,保存到一个数组中。

            var text = $("#form_pr").serializeArray();
            if (thisnum < arrpanel.length) {
                arrpanel.splice(thisnum, 1, text);
            } else {
                arrpanel.push(text);
            }

数组的内容打印出来是这样的:

C# 利用Newtonsoft.Json将json转换为实体对象_第1张图片

格式如下:
[
	[{
		"name": "XX",
		"value": "XX"
	}, {
		"name": "XX",
		"value": "XX"
	}, {
		"name": "XX",
		"value": "XX"
	}],
	[{
		"name": "XX",
		"value": "XX"
	}, {
		"name": "XX",
		"value": "XX"
	}, {
		"name": "XX",
		"value": "XX"
	}]
]

使用ajax提交到控制器

            $.ajax({
                url: "@Url.Action("ExtendField")",
                type: "POST",
                dataType: "json",
                traditional: true,
                data: {
                    form: arrpanel,
                    Type: $.trim($("#EFTable").val())
                },
                success: function (data) {
                   
                }
            })

需要注意的是,在提交数组时,需要将先将使用JSON.stringify将集合转成json字符串,否则在控制器中显示的则是:

 在使用JSON.stringify转换时,不能直接JSON.stringify(数组)否则显示出现的是这样的:

将集合合在了一起

C# 利用Newtonsoft.Json将json转换为实体对象_第2张图片

所以需要循环转换:

  $.each(arrpanel, function (index, item) {arr.push(JSON.stringify(item));}}

提交数据就正常了:

转成对象直接使用时会报错:无法将带 [] 的索引应用于“object”类型的表达式,所以需要转载中使用的方式,将json转为实体对象

下附在项目中用到的完整代码:

            $.each(arrpanel, function (index, item) {
                    arr.push(JSON.stringify(item));
            });
          
            $.ajax({
                url: "@Url.Action("ExtendField")",
                type: "POST",
                dataType: "json",
                traditional: true,
                data: {
                    form: arr ,
                    Type: $.trim($("#EFTable").val())
                },
                success: function (data) {
                    
                }
            })
        [HttpPost]
        public JsonResult ExtendField(List form,string Type)
        {
            int SortNO = new BLL.ExtendFieldBll().GetSortNO();
            for (int index = 0; index < form.Count; index++)
            {
                Object obj = JsonConvert.DeserializeObject(form[index]);
                Newtonsoft.Json.Linq.JArray jarray = obj as Newtonsoft.Json.Linq.JArray;//把上面的obj转换为 Jobject对象
                Model.ExtendField model = new ExtendField();
                for (int i = 0; i < jarray.Count; i++)
                {
                    string listdata = jarray[i].ToString();
                    Object obj1 = JsonConvert.DeserializeObject(listdata);
                    Newtonsoft.Json.Linq.JObject js = obj1 as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象
                    string name = js["name"].ToString();
                    string value = js["value"].ToString();
                    if (name.Equals("InputWay"))
                        model.InputWay = value;
                    else if (name.Equals("Name"))
                        model.Name = value;
                    else if (name.Equals("Description"))
                        model.Description = value;
                    else if (name.Equals("TextLength"))
                        model.TextLength = value == "" ? 50 : Convert.ToInt32(value);
                        ·
                        ·
                        ·
                }
            }
        }

 

你可能感兴趣的:(C#,.NET,JS/JQuery,MVC,Newtonsoft.Json)