关于返回多维数组的json解析的问题

zzl0223 2016-09-09 03:07:44
[{"id":"6664","userID":"830","oid":"14731485569990","integralAll":"0","integral":"-0.01","sourceType":"1","addtime":"1473148650","sourceID":"","sHash":"","coid":"0","isshow":"1","systemid":"34","type":"1","pid":"0","yvip":"0","status":"1","catid":"2","sharetime":"","shareurl":"","tuangou":"","viplast_time":"0","course":[{"id":"77","listorder":"0","updatetime":"1461222523","inputtime":"1461222523","ctitle":"QQ群提取好友","style":"","choice_kc":[{"id":"262","name":"QQ群提取好友","sort":"0","mv_url":"d9a628711e944cc26c0073ee8f2d348c_d"},{"id":"290","name":"天涯论坛顶帖机","sort":"0","mv_url":"d9a628711e6c30477b9877decf2fae1d_d"},{"id":"291","name":"豆瓣顶帖机","sort":"0","mv_url":"d9a628711ed9512ab7f1d6ec23e137e1_d"},{"id":"292","name":"猫扑回帖助手","sort":"0","mv_url":"d9a628711ef83a2d2294e7bbe5d978da_d"},{"id":"293","name":"百度贴吧帖子采集器","sort":"0","mv_url":"d9a628711e80d534834f78d6e2351407_d"}],"choice_kc_idstr":"262,290,291,292,293","systemid":"34","thumb":"/var/upload/image/2016/05/20160503160613_55082.jpg","introduce":""},{"id":"87","listorder":"0","updatetime":"1470129274","inputtime":"1470129274","ctitle":"章节2测试","style":"","choice_kc":[{"id":"298","name":"企业采集器","sort":"0","mv_url":"d9a628711e3378efe26effc9c5514013_d"},{"id":"299","name":"问问精准关键词用户提取","sort":"0","mv_url":"d9a628711e3b04b17bef9f10b6d4e166_d"},{"id":"303","name":"慧聪企业信息采集","sort":"0","mv_url":"d9a628711e4172a0faf5863ea1ac3d75_d"},{"id":"304","name":"生意宝","sort":"0","mv_url":"d9a628711e1359778211c64fcf070ba2_d"},{"id":"305","name":"新浪微博点赞评论","sort":"0","mv_url":"d9a628711e5c71039e4f435d78a7cd6b_d"},{"id":"306","name":"IM","sort":"0","mv_url":"d9a628711e85bebac2a72eeae807b0cd_d"},{"id":"307","name":"图片转换工具","sort":"0","mv_url":"d9a628711e44758f1a33eec29d8813f3_d"}],"choice_kc_idstr":"298,299,303,304,305,306,307","systemid":"34","thumb":"/var/upload/image/2016/08/20160802171452_94984.jpg","introduce":""}],"sysinfo":[{"id":"34","stitle":"QQ群提取好友","thumb":"/var/upload/image/2016/05/20160503160525_60177.jpg","listorder":"0","updatetime":"1461219300","inputtime":"1461219300","picture":"","introduce":"QQ群提取好友一款可以批量提取qq群里面所有群成员QQ号码的软件。主要是帮助客户 获得精准潜在客户, 懂得QQ营销的朋友都明白,QQ群成员是精准的潜在客户.","exception":"3,4","style":"","catid":"2","couClass":"8","sys_hours":"3秒29","keyword":"","description":"","l_nanyi":"1","l_jiage":"5","keshi":"1"}]}]
这是返回的嵌套数组,现在解析的时候几种方法都没搞定,哪位大师帮我看看
public class Q_message
{
public Tx_message Tx_message = new Tx_message();
public Tx_Qmg Tx_Qmg = new Tx_Qmg();
}

public string DwJsonMy(string json)
{
//string ss = json;
//Q_message result = JsonConvert.DeserializeObject<Q_message>(json);
Q_message user = (Q_message)JsonConvert.DeserializeObject(json, typeof(Q_message));

//var tx_mg = JsonConvert.DeserializeObject<List<Q_message>>(json);
List<Q_message> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Q_message>>(json);



return json;
}


标红的返回的错误是“Newtonsoft.Json.JsonSerializationException”类型的未经处理的异常在 Newtonsoft.Json.dll 中发生

其他信息: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'SzzPc.Cls_Rootpath+Q_message' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.

To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.

Path '', line 1, position 1.


list没有报错,但是返回的数据都为空
...全文
527 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
引用 15 楼 yuankaiwsl 的回复:
你是不是属性名没有和json里的Key对应起来?把你现在的实体类贴出来
谢谢,我已经解决了,我刚才担心的是后面再来一组数据的话会不会拿不到,刚测试了一下是可以的
巴士上的邂逅 2016-09-09
  • 打赏
  • 举报
回复
你是不是属性名没有和json里的Key对应起来?把你现在的实体类贴出来
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
引用 13 楼 yuankaiwsl 的回复:
在写一个class包含一个Q_message类型属性,序列化这个新class实例试试
不行,是不是跟没有属名有关 类似Sysinfo
巴士上的邂逅 2016-09-09
  • 打赏
  • 举报
回复
在写一个class包含一个Q_message类型属性,序列化这个新class实例试试
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
引用 11 楼 yuankaiwsl 的回复:
是的,你试试用下边代码(VS2013内置生成Json实体类生成的),如果不行就用System.Runtime.Serialization.Json.DataContractJsonSerializer试试(需引用System.Runtime.Serialization.dll)
public class Rootobject
{
    public Class1[] Property1 { get; set; }
}

public class Class1
{
    public string id { get; set; }
    public string userID { get; set; }
    public string oid { get; set; }
    public string integralAll { get; set; }
    public string integral { get; set; }
    public string sourceType { get; set; }
    public string addtime { get; set; }
    public string sourceID { get; set; }
    public string sHash { get; set; }
    public string coid { get; set; }
    public string isshow { get; set; }
    public string systemid { get; set; }
    public string type { get; set; }
    public string pid { get; set; }
    public string yvip { get; set; }
    public string status { get; set; }
    public string catid { get; set; }
    public string sharetime { get; set; }
    public string shareurl { get; set; }
    public string tuangou { get; set; }
    public string viplast_time { get; set; }
    public Course[] course { get; set; }
    public Sysinfo[] sysinfo { get; set; }
}

public class Course
{
    public string id { get; set; }
    public string listorder { get; set; }
    public string updatetime { get; set; }
    public string inputtime { get; set; }
    public string ctitle { get; set; }
    public string style { get; set; }
    public Choice_Kc[] choice_kc { get; set; }
    public string choice_kc_idstr { get; set; }
    public string systemid { get; set; }
    public string thumb { get; set; }
    public string introduce { get; set; }
}

public class Choice_Kc
{
    public string id { get; set; }
    public string name { get; set; }
    public string sort { get; set; }
    public string mv_url { get; set; }
}

public class Sysinfo
{
    public string id { get; set; }
    public string stitle { get; set; }
    public string thumb { get; set; }
    public string listorder { get; set; }
    public string updatetime { get; set; }
    public string inputtime { get; set; }
    public string picture { get; set; }
    public string introduce { get; set; }
    public string exception { get; set; }
    public string style { get; set; }
    public string catid { get; set; }
    public string couClass { get; set; }
    public string sys_hours { get; set; }
    public string keyword { get; set; }
    public string description { get; set; }
    public string l_nanyi { get; set; }
    public string l_jiage { get; set; }
    public string keshi { get; set; }
}
现在我直接用的第二层List<Tx_message> ss = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Tx_message>>(json); 数据都能获取到了,但是用第一层为什么没有数据呢
巴士上的邂逅 2016-09-09
  • 打赏
  • 举报
回复
是的,你试试用下边代码(VS2013内置生成Json实体类生成的),如果不行就用System.Runtime.Serialization.Json.DataContractJsonSerializer试试(需引用System.Runtime.Serialization.dll)
public class Rootobject
{
    public Class1[] Property1 { get; set; }
}

public class Class1
{
    public string id { get; set; }
    public string userID { get; set; }
    public string oid { get; set; }
    public string integralAll { get; set; }
    public string integral { get; set; }
    public string sourceType { get; set; }
    public string addtime { get; set; }
    public string sourceID { get; set; }
    public string sHash { get; set; }
    public string coid { get; set; }
    public string isshow { get; set; }
    public string systemid { get; set; }
    public string type { get; set; }
    public string pid { get; set; }
    public string yvip { get; set; }
    public string status { get; set; }
    public string catid { get; set; }
    public string sharetime { get; set; }
    public string shareurl { get; set; }
    public string tuangou { get; set; }
    public string viplast_time { get; set; }
    public Course[] course { get; set; }
    public Sysinfo[] sysinfo { get; set; }
}

public class Course
{
    public string id { get; set; }
    public string listorder { get; set; }
    public string updatetime { get; set; }
    public string inputtime { get; set; }
    public string ctitle { get; set; }
    public string style { get; set; }
    public Choice_Kc[] choice_kc { get; set; }
    public string choice_kc_idstr { get; set; }
    public string systemid { get; set; }
    public string thumb { get; set; }
    public string introduce { get; set; }
}

public class Choice_Kc
{
    public string id { get; set; }
    public string name { get; set; }
    public string sort { get; set; }
    public string mv_url { get; set; }
}

public class Sysinfo
{
    public string id { get; set; }
    public string stitle { get; set; }
    public string thumb { get; set; }
    public string listorder { get; set; }
    public string updatetime { get; set; }
    public string inputtime { get; set; }
    public string picture { get; set; }
    public string introduce { get; set; }
    public string exception { get; set; }
    public string style { get; set; }
    public string catid { get; set; }
    public string couClass { get; set; }
    public string sys_hours { get; set; }
    public string keyword { get; set; }
    public string description { get; set; }
    public string l_nanyi { get; set; }
    public string l_jiage { get; set; }
    public string keshi { get; set; }
}
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
引用 7 楼 yuankaiwsl 的回复:
估计是你的实体类有问题,把用到上边定义的类的属性都改成List<T>试试 改属性不是改类
你的意思是不是跟一楼差不多?我试过返回都是空
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
引用 6 楼 sbwwkmyd 的回复:
楼主的定义与 JSON 不匹配
        public class Tx_message
        {
            public string id { get; set; }
            public string userID { get; set; }
            public string oid { get; set; }
            public string integralAll { get; set; }
            public string integral { get; set; }
            public string sourceType { get; set; }
            public string addtime { get; set; }
            public string sourceID { get; set; }
            public string sHash { get; set; }
            public string coid { get; set; }
            public string isshow { get; set; }
            public string systemid { get; set; }
            public string type { get; set; }
            public string pid { get; set; }
            public string yvip { get; set; }
            public string status { get; set; }
            public string catid { get; set; }
            public string sharetime { get; set; }
            public string shareurl { get; set; }
            public string tuangou { get; set; }
            public string viplast_time { get; set; }
            public courses[] course { get; set; }
            public Tx_Qmg[] sysinfo { get; set; }
        }

        public class courses
        {
            public string id { get; set; }
            public string listorder { get; set; }
            public string updatetime { get; set; }
            public string inputtime { get; set; }
            public string ctitle { get; set; }
            public string style { get; set; }
            public choice_kc[] choice_kc { get; set; }
            public string choice_kc_idstr { get; set; }
            public string systemid { get; set; }
            public string thumb { get; set; }
            public string introduce { get; set; }
        }

        public class choice_kc
        {
            public string id { get; set; }
            public string name { get; set; }
            public string sort { get; set; }
            public string mv_url { get; set; }
        }

        public class Tx_Qmg
        {
            public string id { get; set; }
            public string stitle { get; set; }
            public string thumb { get; set; }
            public string listorder { get; set; }
            public string updatetime { get; set; }
            public string inputtime { get; set; }
            public string picture { get; set; }
            public string introduce { get; set; }
            public string exception { get; set; }
            public string style { get; set; }
            public string catid { get; set; }
            public string couClass { get; set; }
            public string sys_hours { get; set; }
            public string keyword { get; set; }
            public string description { get; set; }
            public string l_nanyi { get; set; }
            public string l_jiage { get; set; }
            public string keshi { get; set; }
        }
这样使用fastCSharp没有问题
            Tx_message[] result = fastCSharp.emit.jsonParser.Parse<Tx_message[]>(json);
这个嵌套数组是一个大数组为第一层第二层为两个数组,下面又有嵌套 fastCSharp.emit是哪里的我这里找不到呢,我这是winfrom
showjim 2016-09-09
  • 打赏
  • 举报
回复
如果你非要个 Q_message
        public class Q_message
        {
            public Tx_message Tx_message;
            public Tx_Qmg Tx_Qmg
            {
                get
                {
                    if (Tx_message == null || Tx_message.sysinfo == null || Tx_message.sysinfo.Length == 0) return null;
                    return Tx_message.sysinfo[0];
                }
            }
        }
 using fastCSharp;

           Q_message[] result = fastCSharp.emit.jsonParser.Parse<Tx_message[]>(json)
                .getArray(value => new Q_message { Tx_message = value });
巴士上的邂逅 2016-09-09
  • 打赏
  • 举报
回复
估计是你的实体类有问题,把用到上边定义的类的属性都改成List<T>试试 改属性不是改类
showjim 2016-09-09
  • 打赏
  • 举报
回复
楼主的定义与 JSON 不匹配
        public class Tx_message
        {
            public string id { get; set; }
            public string userID { get; set; }
            public string oid { get; set; }
            public string integralAll { get; set; }
            public string integral { get; set; }
            public string sourceType { get; set; }
            public string addtime { get; set; }
            public string sourceID { get; set; }
            public string sHash { get; set; }
            public string coid { get; set; }
            public string isshow { get; set; }
            public string systemid { get; set; }
            public string type { get; set; }
            public string pid { get; set; }
            public string yvip { get; set; }
            public string status { get; set; }
            public string catid { get; set; }
            public string sharetime { get; set; }
            public string shareurl { get; set; }
            public string tuangou { get; set; }
            public string viplast_time { get; set; }
            public courses[] course { get; set; }
            public Tx_Qmg[] sysinfo { get; set; }
        }

        public class courses
        {
            public string id { get; set; }
            public string listorder { get; set; }
            public string updatetime { get; set; }
            public string inputtime { get; set; }
            public string ctitle { get; set; }
            public string style { get; set; }
            public choice_kc[] choice_kc { get; set; }
            public string choice_kc_idstr { get; set; }
            public string systemid { get; set; }
            public string thumb { get; set; }
            public string introduce { get; set; }
        }

        public class choice_kc
        {
            public string id { get; set; }
            public string name { get; set; }
            public string sort { get; set; }
            public string mv_url { get; set; }
        }

        public class Tx_Qmg
        {
            public string id { get; set; }
            public string stitle { get; set; }
            public string thumb { get; set; }
            public string listorder { get; set; }
            public string updatetime { get; set; }
            public string inputtime { get; set; }
            public string picture { get; set; }
            public string introduce { get; set; }
            public string exception { get; set; }
            public string style { get; set; }
            public string catid { get; set; }
            public string couClass { get; set; }
            public string sys_hours { get; set; }
            public string keyword { get; set; }
            public string description { get; set; }
            public string l_nanyi { get; set; }
            public string l_jiage { get; set; }
            public string keshi { get; set; }
        }
这样使用fastCSharp没有问题
            Tx_message[] result = fastCSharp.emit.jsonParser.Parse<Tx_message[]>(json);
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
引用 4 楼 yuankaiwsl 的回复:
估计是你的实体类有问题,把用到上边定义的类的属性都改成List<T>试试
public class list<Tx_Qmg> { ..... } 你是想说这样么?那 public Tx_Qmg Tx_Qmg = new Tx_Qmg();这里怎么连起来
巴士上的邂逅 2016-09-09
  • 打赏
  • 举报
回复
估计是你的实体类有问题,把用到上边定义的类的属性都改成List<T>试试
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
@1# 我试了你这种方式还是空值
zzl0223 2016-09-09
  • 打赏
  • 举报
回复
public class Q_message { public Tx_message Tx_message = new Tx_message(); public Tx_Qmg Tx_Qmg = new Tx_Qmg(); } public class Tx_message { public string id{ get; set; } public string userID { get; set; } public string oid { get; set; } public string integralAll { get; set; } public string integral { get; set; } public string sourceType { get; set; } public string addtime { get; set; } public string sourceID { get; set; } public string sHash { get; set; } public string coid { get; set; } public string isshow { get; set; } public string systemid{ get; set; } public string type { get; set; } public string pid { get; set; } public string yvip { get; set; } public string status { get; set; } public string catid { get; set; } public string sharetime { get; set; } public string shareurl { get; set; } public string tuangou { get; set; } public string viplast_time { get; set; } public string courses { get; set; } public courses course = new courses(); } public class courses { public string id { get; set; } public string listorder { get; set; } public string updatetime { get; set; } public string inputtime { get; set; } public string ctitle { get; set; } public string style { get; set; } public choice_kc choice_kc = new choice_kc(); public string choice_kc_idstr { get; set; } public string systemid { get; set; } public string thumb { get; set; } public string introduce { get; set; } } public class choice_kc { public string id { get; set; } public string name { get; set; } public string mv_url { get; set; } } public class Tx_Qmg { public string id { get; set; } public string stitle { get; set; } public string thumb { get; set; } public string listorder { get; set; } public string updatetime { get; set; } public string inputtime { get; set; } public string picture { get; set; } public string introduce { get; set; } public string exception { get; set; } public string style { get; set; } public string catid { get; set; } public string couClass { get; set; } public string sys_hours { get; set; } public string keyword { get; set; } public string description { get; set; } public string l_nanyi { get; set; } public string l_jiage { get; set; } public string keshi { get; set; } } 有呢
by_封爱 版主 2016-09-09
  • 打赏
  • 举报
回复
先构造类啊.


public class ChoiceKc
{
    public string id { get; set; }
    public string name { get; set; }
    public string sort { get; set; }
    public string mv_url { get; set; }
}

public class Course
{
    public string id { get; set; }
    public string listorder { get; set; }
    public string updatetime { get; set; }
    public string inputtime { get; set; }
    public string ctitle { get; set; }
    public string style { get; set; }
    public List<ChoiceKc> choice_kc { get; set; }
    public string choice_kc_idstr { get; set; }
    public string systemid { get; set; }
    public string thumb { get; set; }
    public string introduce { get; set; }
}

public class Sysinfo
{
    public string id { get; set; }
    public string stitle { get; set; }
    public string thumb { get; set; }
    public string listorder { get; set; }
    public string updatetime { get; set; }
    public string inputtime { get; set; }
    public string picture { get; set; }
    public string introduce { get; set; }
    public string exception { get; set; }
    public string style { get; set; }
    public string catid { get; set; }
    public string couClass { get; set; }
    public string sys_hours { get; set; }
    public string keyword { get; set; }
    public string description { get; set; }
    public string l_nanyi { get; set; }
    public string l_jiage { get; set; }
    public string keshi { get; set; }
}

public class RootObject
{
    public string id { get; set; }
    public string userID { get; set; }
    public string oid { get; set; }
    public string integralAll { get; set; }
    public string integral { get; set; }
    public string sourceType { get; set; }
    public string addtime { get; set; }
    public string sourceID { get; set; }
    public string sHash { get; set; }
    public string coid { get; set; }
    public string isshow { get; set; }
    public string systemid { get; set; }
    public string type { get; set; }
    public string pid { get; set; }
    public string yvip { get; set; }
    public string status { get; set; }
    public string catid { get; set; }
    public string sharetime { get; set; }
    public string shareurl { get; set; }
    public string tuangou { get; set; }
    public string viplast_time { get; set; }
    public List<Course> course { get; set; }
    public List<Sysinfo> sysinfo { get; set; }
}

不知道对不对 试试

110,539

社区成员

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

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

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