首页 新闻 会员 周边

JSOM字符串转换为list集合

0
悬赏园豆:50 [已解决问题] 解决于 2014-07-22 13:27

怎样将JSOM字符串转换为list集合.

HANXUEAO的主页 HANXUEAO | 初学一级 | 园豆:13
提问于:2014-07-21 11:23
< >
分享
最佳答案
1

可以使用序列化.

//JsonModel  根据你的Json字符串设计的Model.
var jsonList= Newtonsoft.Json.JsonConvert.DeserializeObject<JsonModel>("Json字符串");
收获园豆:50
晓菜鸟 | 老鸟四级 |园豆:2594 | 2014-07-21 13:14

 

                    $("#subAcademy").click(function () {
                        var arrayAcademy = [],
                           academyName= {};
                        for (var i = 0; i < $(".addAcademy").length; i++) {
                            academyName.Name = ($($(".addAcademy div")[i]).text());
                            academyName.AcademyID = (i);
                            academyName.IsPass = (true);
                            arrayAcademy.push(JSON.stringify(arrayAcademy));
                        };

                        var sacademyName = JSON.stringify(arrayAcademy)
                        $.ajax({
                            url: "AddLotAcademy.ashx",
                            data: {
                                    academyData: sacademyName,
                                command: "subContent"
                            },
                            datatype: "json",
                            type: "post",
                            success: function (data) {
      
                            }
                        })
                    })

 

以上是我前端的代码, 我的本意是想获取页面上的学院信息,然后传入后台,处理后得到每一个学院对象装进list集合,最后历遍集合将数据添加进数据库,但是如果前端按照以上方法获取得到的是这组数据:

所以不知道后台要怎么处理了,第一次使用ajax,求助...在线等.

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 09:17

@HANXUEAO: 这个和你一开始发的那个图的Json格式不一样,但是你现在这种格式更好处理了,自己新建一个Model,添加 Name,AcademyId,Ispass 这些属性,然后序列化一下就可以了。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:20

@晓菜鸟: 

id是int类型的, name是string类型的,ispass是bool类型的,直接序列化肯定不行,所以要怎么转换?

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 09:27

@HANXUEAO: 为什么不行?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:29

@HANXUEAO: 代码发出来,我本地帮你调式一下看看。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:30

@晓菜鸟: 可以加你QQ吗,帮我远程调试一下.万分感谢

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 09:32

@HANXUEAO: 上班中呢,不敢远程调式啊,你就把你的Json字符串和你新建的实体发给我就行了,

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 09:34

@晓菜鸟:                

  //将数据向后台发送提交请求
                    $("#subAcademy").click(function () {
                        var arrayAcademy = [],
                           academyName = {};
                        for (var i = 0; i < $(".addAcademy").length; i++) {
                            academyName.Name = ($($(".addAcademy div")[i]).text());
                            academyName.AcademyID = (i);
                            academyName.IsPass = (true);
                            arrayAcademy.push(JSON.stringify(arrayAcademy));
                        };

                        var sacademyName = JSON.stringify(arrayAcademy)
                        $.ajax({
                            url: "AddLotAcademy.ashx",
                            data: {
                                academyData: sacademyName,
                                command: "subContent"
                            },
                            datatype: "json",
                            type: "post",
                            success: function (data) {

                            }
                        })
                    })
//(我看过一些代码例子都是直接将json传入后台的,但是调试都没办法成功,不知道是代码问题还是ajax只允//许传递字符串,所以上面用了两次的字符串转换,不知道有没有更好的方法)

arrayAcademy得到的是
[ "{"Name":"管理学院","AcademyID":0,"IsPass":true}"
"{"Name":"城建学院","AcademyID":1,"IsPass":true}"
 "{"Name":"人文学院","AcademyID":2,"IsPass":true}"
"{"Name":"现代服务学院","AcademyID":3,"IsPass":true}"
 "{"Name":"信息学院","AcademyID":4,"IsPass":true}"
"{"Name":"生环学院","AcademyID":5,"IsPass":true}"
 "{"Name":"艺术学院","AcademyID":6,"IsPass":true}"
 "{"Name":"外国语学院","AcademyID":7,"IsPass":true}"}

sacademyName 获得的数据是:
["{\"Name\":\"管理学院\",\"AcademyID\":0,\"IsPass\":true}","{\"Name\":\"城建学院\",\"AcademyID\":1,\"IsPass\":true}","{\"Name\":\"人文学院\",\"AcademyID\":2,\"IsPass\":true}","{\"Name\":\"现代服务学院\",\"AcademyID\":3,\"IsPass\":true}","{\"Name\":\"信息学院\",\"AcademyID\":4,\"IsPass\":true}","{\"Name\":\"生环学院\",\"AcademyID\":5,\"IsPass\":true}","{\"Name\":\"艺术学院\",\"AcademyID\":6,\"IsPass\":true}","{\"Name\":\"外国语学院\",\"AcademyID\":7,\"IsPass\":true}"]


model类:
            private int _academyid;
        private string _name;
        private bool _ispass= true;
        
        public int AcademyID
        {
            set{ _academyid=value;}
            get{return _academyid;}
        }
        
        public string Name
        {
            set{ _name=value;}
            get{return _name;}
        }
        
        public bool IsPass
        {
            set{ _ispass=value;}
            get{return _ispass;}
        }

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 09:49

@晓菜鸟: 能够序列化吗

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 10:30

@HANXUEAO: 你写的不能,有问题,传递的时候是可以直接传递Json的,你的Json格式不对,所以导致无法序列化,我写的这个都可以,你看看哪里不同。

string jsonString = "[{'Name':'城建学院','AcademyID':1,'IsPass':true},{'Name':'管理学院','AcademyID':0,'IsPass':false}]";
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<JsonModel>>(jsonString);

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 10:41

@晓菜鸟: 真是麻烦您了,还有一个小问题

 和你写的格式不同的原因就是我将集合放入数组的时候将集合先转换成了字符串

          for (var i = 0; i < $(".addAcademy").length; i++) {
                            academyName.Name = ($($(".addAcademy div")[i]).text());
                            academyName.AcademyID = (i);
                            academyName.IsPass = (true);
                            arrayAcademy.push(JSON.stringify(arrayAcademy));//转换为字符串放入数组
                        };

但是如果不这么做的话循环得到的就是相同的数据:

[{"Name":"外国语学院","AcademyID":7,"IsPass":true},

{"Name":"外国语学院","AcademyID":7,"IsPass":true},

{"Name":"外国语学院","AcademyID":7,"IsPass":true},

{"Name":"外国语学院","AcademyID":7,"IsPass":true}]

所以这边的程序应该怎么写?

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 10:58

@HANXUEAO: 你很急吗?能等我一会吗?我这边手头上还有一点工作,稍等我一会可以吗?很抱歉。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 11:26

@晓菜鸟: 不急, 你忙完了在回复我好了,谢了.

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 11:27

@HANXUEAO: 不能在接受数据的时候直接拼接成Json的格式吗?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 13:16

@晓菜鸟: 这个我已经解决了,只要把集合的声明放在循环里面,每次循环重新声明集合,那就是新的集合添加到数组里面. 万分感谢!

HANXUEAO | 园豆:13 (初学一级) | 2014-07-22 13:26

@HANXUEAO: 嗯嗯,这种方式也可以,只要解决了问题就好,不用谢,加油吧!共勉。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-22 15:32
其他回答(3)
1

JSON?要转成下面的形式吗?

[{"name":"管理学院","key":"管理学院"},{"name":"管理学院","key":"管理学院"}......]

需要分别取出原object的name,和key属性的数组,循环变换即可

柒零壹 | 园豆:258 (菜鸟二级) | 2014-07-21 12:37
0

你这个json形式是自己拼的,还是序列化的,如果是序列化的话,是根据什么对象序列化的呢?

火悬崖 | 园豆:434 (菜鸟二级) | 2014-07-21 17:04
0

序列化的东西,还是建议用开源的库,自己对每一个类都写一个会累死的。fastjson之类的就挺好使用

苏格拉底儿掉 | 园豆:216 (菜鸟二级) | 2014-07-21 23:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册