[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; } }
全加上还是报一样的错误
List<datas> list = JsonConvert.DeserializeObject<List<datas>>(jsontxt);
换成
var item = JsonConvert.DeserializeObject<datas>(jsontxt);
试试看?
是的,楼主这个Json字符串就算能反序列化出来,
也是出来一个对象,这个对象里有一个数组成员Datas
而不是直接反序列化出一个数组
其他字段也要加上 [DataMember]
这个问题之前遇到过,最后发现是Newtonsoft.Json不支持继承了IList的对象的反序列化,用最新的Newtonsoft.Json或者不继承IList即可。你的InnMap是不是继承了IList接口?
没有继承IList接口,所有的代码都在上面了,
如果Newtonsoft.Json不支持IList了,那上面的数据要怎么才能反序列化?谢谢。
@cean: 仔细检查一下jsontxt 的结构和你的InnMap结构是否一致。