您好,欢迎来到外链网!
当前位置:外链网 » 站长资讯 » 专业问答 » 文章详细 订阅RssFeed

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

来源:互联网 浏览:32次 时间:2023-04-08
转载链接: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); }

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

格式如下:[[{"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(数组)否则显示出现的是这样的:

将集合合在了一起

所以需要循环转换:

$.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<string> 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); · · · } } }

?