多层嵌套json怎么反序列化为实体对象

假装努力的傻子 2018-08-17 10:26:55
我的json字符串是:{
"resultInfo":{
"respDesc":"success",
"cardInfo":{
"apnInfo":[
{
"areaInfo":[
{
"areaState":"A01",
"totalFlow":"102400.00",
"endDate":"2018-08-31 23:59:59",
"goodsName":"移动月付共享-100M",
"startDate":"2018-08-01 20:57:25"
}
],
"firstCallTime":"2018-05-24 11:03:10",
"preDestroyTime":"",
"apnName":"CMIOTLENOVO.ZJ",
"apnState":"64"
}
],
"iccid":"89860414111870323600",
"retailName":"",
"channelCustId":"3071838000795097",
"smsCount":"0",
"operatorsName":"中国移动",
"imsi":"460043483203600",
"msisdn":"1440148323600",
"deviceId":"",
"tradeId":""
},
"messageId":"",
"respCode":"0000"
}
}

我的数据结构是:
public class QueryCard
{
public QueryCardInfo resultInfo { get; set; }
}

public class QueryCardInfo : BaseResultInfo2
{
public string messageId { get; set; }
public List<CardInfoData> cardInfo { get; set; }
}

public class CardInfoData
{
public string imsi { get; set; }
public string iccid { get; set; }
public string tradeId { get; set; }
public string msisdn { get; set; }
public string channelCustId { get; set; }
public string deviceid { get; set; }
public string operatorsname { get; set; }
public string smsCount { get; set; }
public string retailName { get; set; }
public List<apnInfoData> apnInfo { get; set; }
}

public class apnInfoData
{
public string apnName { get; set; }
public string apnState { get; set; }
public string firstCallTime { get; set; }
public string preDestroyTime { get; set; }
public List<areaInfoData> areaInfo { get; set; }
}

public class areaInfoData
{
public string totalFlow { get; set; }
public string startDate { get; set; }
public string endDate { get; set; }
public string goodsName { get; set; }
public string areaState { get; set; }
}

我反序列化的语句是:
QueryCard model = JsonHelper.DeserializeJsonToObject<QueryCard>(str);

DeserializeJsonToObject具体是:
/// <summary>
/// 解析JSON字符串生成对象实体
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
/// <returns>对象实体</returns>
public static T DeserializeJsonToObject<T>(string json) where T : class
{
try
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
}
catch (Exception ex)
{
return null;
}
}

但是反序列化的model一直是null。请指教
...全文
2167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
9527. 2020-04-14
  • 打赏
  • 举报
回复
引用 8 楼 正怒月神 的回复:
统一方案都是,复制你的json. 打开vs--编辑 --选择性黏贴--将json转化为类 然后就是你的model了
你知道的太多了!!!!白写了那么久!!!!还没写对
csdnFUCKINGSUCKS 2018-08-20
  • 打赏
  • 举报
回复

public class AreaInfoItem
{
/// <summary>
///
/// </summary>
public string areaState { get; set; }
/// <summary>
///
/// </summary>
public string totalFlow { get; set; }
/// <summary>
///
/// </summary>
public string endDate { get; set; }
/// <summary>
/// 移动月付共享-100M
/// </summary>
public string goodsName { get; set; }
/// <summary>
///
/// </summary>
public string startDate { get; set; }
}

public class ApnInfoItem
{
/// <summary>
///
/// </summary>
public List <AreaInfoItem > areaInfo { get; set; }
/// <summary>
///
/// </summary>
public string firstCallTime { get; set; }
/// <summary>
///
/// </summary>
public string preDestroyTime { get; set; }
/// <summary>
///
/// </summary>
public string apnName { get; set; }
/// <summary>
///
/// </summary>
public string apnState { get; set; }
}

public class CardInfo
{
/// <summary>
///
/// </summary>
public List <ApnInfoItem > apnInfo { get; set; }
/// <summary>
///
/// </summary>
public string iccid { get; set; }
/// <summary>
///
/// </summary>
public string retailName { get; set; }
/// <summary>
///
/// </summary>
public string channelCustId { get; set; }
/// <summary>
///
/// </summary>
public string smsCount { get; set; }
/// <summary>
/// 中国移动
/// </summary>
public string operatorsName { get; set; }
/// <summary>
///
/// </summary>
public string imsi { get; set; }
/// <summary>
///
/// </summary>
public string msisdn { get; set; }
/// <summary>
///
/// </summary>
public string deviceId { get; set; }
/// <summary>
///
/// </summary>
public string tradeId { get; set; }
}

public class ResultInfo
{
/// <summary>
///
/// </summary>
public string respDesc { get; set; }
/// <summary>
///
/// </summary>
public CardInfo cardInfo { get; set; }
/// <summary>
///
/// </summary>
public string messageId { get; set; }
/// <summary>
///
/// </summary>
public string respCode { get; set; }
}

public class Root
{
/// <summary>
///
/// </summary>
public ResultInfo resultInfo { get; set; }
}
正怒月神 版主 2018-08-20
  • 打赏
  • 举报
回复
统一方案都是,复制你的json.
打开vs--编辑 --选择性黏贴--将json转化为类
然后就是你的model了
全栈极简 2018-08-19
  • 打赏
  • 举报
回复
stherix 2018-08-17
  • 打赏
  • 举报
回复
cardInfo不是数组是对象,对应不上
stherix 2018-08-17
  • 打赏
  • 举报
回复
本来就支持多层嵌套的 ,如果结果为null
要么是代码写的有问题,要么序列化工具不支持字段有对应不上的情况
  • 打赏
  • 举报
回复
https://blog.csdn.net/starfd/article/details/48686239
你的层次不对,另外你有try catch,所以还要看下是不是出异常导致null

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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