C#用Newtonsoft.Json如何解析这段json,最好能贴出能用的代码

胡同o 2014-06-01 05:20:01
{"status":1,"rule":{"1":{"id":"1","name":"方式1","silver":18300},"2":{"id":"2","name":"方式2","gold":"2"},"3":{"id":"3","name":"方式3","gold":10}},"list":{"1":{"id":"325346","name":"张三","quality":"3","level":"178","image":"76","type":"2","wuli":"110","zhili":"130","tili":"129","wuliup":"191","zhiliup":"186","tiliup":"191","star":"10","goout":"1","cultivate":{"gid":325346,"wuliup":185,"zhiliup":183,"tiliup":186,"type":1}},"2":{"id":"316214","name":"李四","quality":"1","level":"122","image":"63","type":"2","wuli":"115","zhili":"128","tili":"130","wuliup":"20","zhiliup":"19","tiliup":"20","star":"9","goout":"1","cultivate":[]},"3":{"id":"270632","name":"王五","quality":"1","level":"78","image":"15","type":"1","wuli":"110","zhili":"67","tili":"107","wuliup":"0","zhiliup":"0","tiliup":"0","star":"7","goout":"1","cultivate":[]},"4":{"id":"285869","name":"赵六","quality":"1","level":"66","image":"22","type":"1","wuli":"89","zhili":"82","tili":"88","wuliup":"0","zhiliup":"0","tiliup":"0","star":"5","goout":"1","cultivate":[]},"5":{"id":"275681","name":"张三","quality":"1","level":"44","image":"68","type":"2","wuli":"79","zhili":"100","tili":"87","wuliup":"11","zhiliup":"12","tiliup":"12","star":"6","goout":"1","cultivate":[]},"6":{"id":"305129","name":"李四","quality":"1","level":"44","image":"60","type":"1","wuli":"111","zhili":"80","tili":"112","wuliup":"0","zhiliup":"0","tiliup":"0","star":"8","goout":"1","cultivate":[]},"7":{"id":"282690","name":"王五","quality":"1","level":"30","image":"115","type":"2","wuli":"116","zhili":"129","tili":"130","wuliup":"1","zhiliup":"2","tiliup":"1","star":"9","goout":"1","cultivate":[]},"8":{"id":"272455","name":"赵六","quality":"1","level":"1","image":"73","type":"2","wuli":"75","zhili":"106","tili":"76","wuliup":"0","zhiliup":"0","tiliup":"0","star":"6","goout":"1","cultivate":[]}}}
...全文
816 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
胡同o 2014-06-04
  • 打赏
  • 举报
回复
引用 22 楼 zylsky 的回复:
[quote=引用 19 楼 a7265813 的回复:] [quote=引用 16 楼 zylsky 的回复:] 没有,我直接复制的你帖子中的,重新下载吧,我把json放到软件目录下了,你自己看一下.调试,下断点. http://kanboxshare.com/link/i9spZgrfonFGOpvnB6WUzKcprS27sJJK4gQb6sbdjtDCh8mwtai3m4U4H
还是不对,你这里是写死了,但我的json中rule和list的个数是可变的[/quote] 自己下断点调试吧[/quote] 问题用正则表达式解决了,谢谢你们的解答
胡同o 2014-06-02
  • 打赏
  • 举报
回复
引用 17 楼 bwangel 的回复:
[quote=引用 10 楼 a7265813 的回复:] [quote=引用 7 楼 bwangel 的回复:] 你可以先用js把它eval出来,然后在js的调试器里看下对象层次结构,然后照着写一个C#的类定义出来。 然后用json反序列化这个类
json中的rule和list下只有一个数字,而下一级是键值一一对应,这个类该如何写?[/quote] 你试试在类里搞一个Dictionary<int, string>的字典对象[/quote] 嗯,我再去试试
胡同o 2014-06-02
  • 打赏
  • 举报
回复
引用 18 楼 sbwwkmyd 的回复:
试试fastCSharp
        public class X
        {
            public int status;
            public rule[] rules;
            private fastCSharp.setup.cSharp.json.node rule
            {
                set
                {
                    rules = value.Dictionary.Values.getArray(node => fastCSharp.setup.cSharp.json.parse.Get<rule>(node));
                }
            }
            public list[] lists;
            private fastCSharp.setup.cSharp.json.node list
            {
                set
                {
                    lists = value.Dictionary.Values.getArray(node => fastCSharp.setup.cSharp.json.parse.Get<list>(node));
                }
            }
        }
        public class rule
        {
            public string id;
            public string name;
            public string gold;
            public int silver;
        }
        public class list
        {
            public string id;
            public string name;
            public string quality;
            public string level;
            public string image;
            public string type;
            public string wuli;
            public string zhili;
            public string tili;
            public string wuliup;
            public string zhiliup;
            public string tiliup;
            public string star;
            public string goout;
            public cultivate Cultivate;
            private fastCSharp.setup.cSharp.json.node cultivate
            {
                set
                {
                    if (value.Type == fastCSharp.setup.cSharp.json.node.nodeType.Dictionary)
                    {
                        Cultivate = fastCSharp.setup.cSharp.json.parse.Get<cultivate>(value);
                    }
                }
            }
        }
        public class cultivate
        {
            public int gid;
            public int wuliup;
            public int zhiliup;
            public int tiliup;
            public int type;
        }
            X value = fastCSharp.setup.cSharp.json.parse.Get<X>(json);
好的,我去试试~
胡同o 2014-06-02
  • 打赏
  • 举报
回复
引用 16 楼 zylsky 的回复:
没有,我直接复制的你帖子中的,重新下载吧,我把json放到软件目录下了,你自己看一下.调试,下断点. http://kanboxshare.com/link/i9spZgrfonFGOpvnB6WUzKcprS27sJJK4gQb6sbdjtDCh8mwtai3m4U4H
还是不对,你这里是写死了,但我的json中rule和list的个数是可变的
showjim 2014-06-02
  • 打赏
  • 举报
回复
试试fastCSharp
        public class X
        {
            public int status;
            public rule[] rules;
            private fastCSharp.setup.cSharp.json.node rule
            {
                set
                {
                    rules = value.Dictionary.Values.getArray(node => fastCSharp.setup.cSharp.json.parse.Get<rule>(node));
                }
            }
            public list[] lists;
            private fastCSharp.setup.cSharp.json.node list
            {
                set
                {
                    lists = value.Dictionary.Values.getArray(node => fastCSharp.setup.cSharp.json.parse.Get<list>(node));
                }
            }
        }
        public class rule
        {
            public string id;
            public string name;
            public string gold;
            public int silver;
        }
        public class list
        {
            public string id;
            public string name;
            public string quality;
            public string level;
            public string image;
            public string type;
            public string wuli;
            public string zhili;
            public string tili;
            public string wuliup;
            public string zhiliup;
            public string tiliup;
            public string star;
            public string goout;
            public cultivate Cultivate;
            private fastCSharp.setup.cSharp.json.node cultivate
            {
                set
                {
                    if (value.Type == fastCSharp.setup.cSharp.json.node.nodeType.Dictionary)
                    {
                        Cultivate = fastCSharp.setup.cSharp.json.parse.Get<cultivate>(value);
                    }
                }
            }
        }
        public class cultivate
        {
            public int gid;
            public int wuliup;
            public int zhiliup;
            public int tiliup;
            public int type;
        }
            X value = fastCSharp.setup.cSharp.json.parse.Get<X>(json);
zylsky 2014-06-02
  • 打赏
  • 举报
回复
引用 19 楼 a7265813 的回复:
[quote=引用 16 楼 zylsky 的回复:] 没有,我直接复制的你帖子中的,重新下载吧,我把json放到软件目录下了,你自己看一下.调试,下断点. http://kanboxshare.com/link/i9spZgrfonFGOpvnB6WUzKcprS27sJJK4gQb6sbdjtDCh8mwtai3m4U4H
还是不对,你这里是写死了,但我的json中rule和list的个数是可变的[/quote] 自己下断点调试吧
bwangel 2014-06-01
  • 打赏
  • 举报
回复
引用 10 楼 a7265813 的回复:
[quote=引用 7 楼 bwangel 的回复:] 你可以先用js把它eval出来,然后在js的调试器里看下对象层次结构,然后照着写一个C#的类定义出来。 然后用json反序列化这个类
json中的rule和list下只有一个数字,而下一级是键值一一对应,这个类该如何写?[/quote] 你试试在类里搞一个Dictionary<int, string>的字典对象
zylsky 2014-06-01
  • 打赏
  • 举报
回复
没有,我直接复制的你帖子中的,重新下载吧,我把json放到软件目录下了,你自己看一下.调试,下断点. http://kanboxshare.com/link/i9spZgrfonFGOpvnB6WUzKcprS27sJJK4gQb6sbdjtDCh8mwtai3m4U4H
胡同o 2014-06-01
  • 打赏
  • 举报
回复
引用 13 楼 zylsky 的回复:
下载 http://kanboxshare.com/link/p4ZlFpzBxFdy35LBfR49VC3CV3aAKwCRxx9GhZvFuVbZssKMZObcoehlR
弄了个例子给你,自己下demo

你应该修改了我原来的json吧?我这里运行你的demo报错
zylsky 2014-06-01
  • 打赏
  • 举报
回复
胡同o 2014-06-01
  • 打赏
  • 举报
回复
引用 11 楼 iyomumx 的回复:
http://json2csharp.com/
您好,你给的网址粘贴json进去点按钮没效果啊
iyomumx 2014-06-01
  • 打赏
  • 举报
回复
胡同o 2014-06-01
  • 打赏
  • 举报
回复
引用 7 楼 bwangel 的回复:
你可以先用js把它eval出来,然后在js的调试器里看下对象层次结构,然后照着写一个C#的类定义出来。 然后用json反序列化这个类
json中的rule和list下只有一个数字,而下一级是键值一一对应,这个类该如何写?
胡同o 2014-06-01
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
你所谓的“解析”是指什么结果呢?你应该先贴出你的应用场景来。
就是把json中所有的数据取出来
胡同o 2014-06-01
  • 打赏
  • 举报
回复
引用 5 楼 zylsky 的回复:
按这个图写一个对应的类,然后用jsonconvert.deserializeobject<ClassTyppe>就行了.
json中的rule和list下只有一个数字,而下一级是键值一一对应,这个类我真不知道如何设计
bwangel 2014-06-01
  • 打赏
  • 举报
回复
你可以先用js把它eval出来,然后在js的调试器里看下对象层次结构,然后照着写一个C#的类定义出来。 然后用json反序列化这个类
  • 打赏
  • 举报
回复
你所谓的“解析”是指什么结果呢?你应该先贴出你的应用场景来。
zylsky 2014-06-01
  • 打赏
  • 举报
回复
按这个图写一个对应的类,然后用jsonconvert.deserializeobject<ClassTyppe>就行了.
胡同o 2014-06-01
  • 打赏
  • 举报
回复
有人帮忙吗?
胡同o 2014-06-01
  • 打赏
  • 举报
回复
引用 1 楼 joeycih 的回复:
定义一个相关的类 然后jsonconvert.deserializeobject<ClassTyppe> 应该可以吧
能帮忙写下吗?急用。谢谢
加载更多回复(2)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧