首页 新闻 会员 周边

这样的json数据,如何反序列化成实体类。

0
悬赏园豆:20 [已解决问题] 解决于 2014-03-03 12:11
[Serializable]
    [DataContract]
    public class datas
    {
        [DataMember]
        public List<InnMap> data { get; set; }
    }
    public class innModel
    {
        public string InnID { get; set; }
        public string InnName { get; set; }
        public string LoginName { get; set; }
    }
    public partial class testjson : System.Web.UI.Page
    {
        string jsontxt = "{\"data\":[{\"InnID\":\"103\",\"InnName\":\"123123123\",\"LoginName\":\"sfasdfas\"},{\"InnID\":\"102\",\"InnName\":\"sssssss\",\"LoginName\":\"shuxin\"},{\"InnID\":\"101\",\"InnName\":\"sssssss\",\"LoginName\":\"guangyuan\"},{\"InnID\":\"100\",\"InnName\":\"fffffff\",\"LoginName\":\"chengqi\"},{\"InnID\":\"99\",\"InnName\":\"sdfsadfasdf\",\"LoginName\":\"mengba\"}]} ";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {                
                List<datas> list = JsonConvert.DeserializeObject<List<datas>>(jsontxt);//这句出错。
                Response.Write(jsontxt);
            }
        }
    }

一直提示下面这错误:

Cannot deserialize JSON object into type 'System.Collections.Generic.List`1

,不知哪里写错了。

请教大家,谢谢了。

[Serializable]
    [DataContract]
    public class datas
    {
        [DataMember]
        public List<InnMap> data { get; set; }
        public string InnID { get; set; }
        public string InnName { get; set; }
        public string LoginName { get; set; }
    }
    public class innModel
    {
        public string InnID { get; set; }
        public string InnName { get; set; }
        public string LoginName { get; set; }
    }
    public partial class testjson : System.Web.UI.Page
    {
        string jsontxt = "{\"data\":[{\"InnID\":\"103\",\"InnName\":\"123123123\",\"LoginName\":\"sfasdfas\"},{\"InnID\":\"102\",\"InnName\":\"sssssss\",\"LoginName\":\"shuxin\"},{\"InnID\":\"101\",\"InnName\":\"sssssss\",\"LoginName\":\"guangyuan\"},{\"InnID\":\"100\",\"InnName\":\"fffffff\",\"LoginName\":\"chengqi\"},{\"InnID\":\"99\",\"InnName\":\"sdfsadfasdf\",\"LoginName\":\"mengba\"}]} ";
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataSet ds = new Cean.BLL.Inn().GetList(10, "InnID,InnName,LoginName", "", "innid desc");
                string json = Utils.DtToJSON(ds.Tables[0]);// Utils.DataTableToJSON(ds.Tables[0], "");

                //Cean.Model.Inn model = (Cean.Model.Inn)JsonConvert.DeserializeObject<Cean.Model.Inn>(json);

                List<datas> list = JsonConvert.DeserializeObject<List<datas>>(jsontxt);
                Response.Write(jsontxt);
            }
        }
    }

问题补充:
[Serializable]
    [DataContract]
    public class innModel
    {
        [DataMember(Name = "InnID")]
        public string InnID { get; set; }
        [DataMember(Name = "InnName")]
        public string InnName { get; set; }
        [DataMember(Name = "LoginName")]
        public string LoginName { get; set; }
    }

全加上还是报一样的错误

cean的主页 cean | 初学一级 | 园豆:49
提问于:2013-12-16 16:57
< >
分享
最佳答案
1
List<datas> list = JsonConvert.DeserializeObject<List<datas>>(jsontxt);

换成

var item = JsonConvert.DeserializeObject<datas>(jsontxt);


试试看?

收获园豆:7
I,Robot | 大侠五级 |园豆:9783 | 2013-12-16 20:59

是的,楼主这个Json字符串就算能反序列化出来,

也是出来一个对象,这个对象里有一个数组成员Datas

而不是直接反序列化出一个数组

 

吴瑞祥 | 园豆:29449 (高人七级) | 2013-12-19 10:17
其他回答(2)
0

其他字段也要加上  [DataMember]

收获园豆:6
幕三少 | 园豆:1384 (小虾三级) | 2013-12-16 17:09
0

这个问题之前遇到过,最后发现是Newtonsoft.Json不支持继承了IList的对象的反序列化,用最新的Newtonsoft.Json或者不继承IList即可。你的InnMap是不是继承了IList接口?

收获园豆:7
水晶途途 | 园豆:1443 (小虾三级) | 2013-12-16 17:32

没有继承IList接口,所有的代码都在上面了,

如果Newtonsoft.Json不支持IList了,那上面的数据要怎么才能反序列化?谢谢。

支持(0) 反对(0) cean | 园豆:49 (初学一级) | 2013-12-16 17:39

@cean: 仔细检查一下jsontxt 的结构和你的InnMap结构是否一致。

支持(0) 反对(0) 水晶途途 | 园豆:1443 (小虾三级) | 2013-12-16 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册