通过Newtonsoft.Json将一个json类型的字符串反序列化为dynamic后直接使用报错

源代码:

namespace ConsoleApplication1
{ class Program
{
static void Main()
{
var data = "{\"C_Describe\":\"测试\",\"FY_Subtitle\":\"测试\",\"MAX_ZJ\":20000,\"HType\":\"WFB\",\"communityID\":\"28075\",
              \"FY_id\":110352,\"areaID\":11,\"IsPublisher\":\"0\",\"attURL\":\"\"}";
dynamic jsonData = FromJson<dynamic>(data); if (ContainChinese(jsonData.FY_Subtitle_CN))
Console.WriteLine("");
if (ContainChinese((dynamic)jsonData.FY_Subtitle))
Console.WriteLine(""); Console.ReadKey();
} /// <summary>
/// 判断是否包含中文
/// </summary>
/// <param name="CString"></param>
/// <returns></returns>
public static bool ContainChinese(string CString)
{
return Regex.IsMatch(CString??"", @"[\u4e00-\u9fbb]");
}
/// <summary>
/// 将json字符串反序列化为dynamic类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonText"></param>
/// <returns></returns>
public static T FromJson<T>(string jsonText)
{
var json = new JsonSerializer
{
NullValueHandling = NullValueHandling.Ignore,
ObjectCreationHandling = ObjectCreationHandling.Replace,
MissingMemberHandling = MissingMemberHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
}; var sr = new StringReader(jsonText);
var reader = new JsonTextReader(sr);
var result = (T)json.Deserialize(reader, typeof(T));
reader.Close(); return result;
}
}
}

解决方法

在调用通过json反序列化的dynamic对象时,要先强制转换为对应的类型

代码:

if (ContainChinese((jsonData.FY_Subtitle_CN ?? "").ToString()))
Console.WriteLine("");
if (ContainChinese((jsonData.FY_Subtitle ?? "").ToString()))
Console.WriteLine("");

最新文章

  1. python安装BeautifulSoup注意事项
  2. 在linux下Ant的环境配置
  3. Shader 学习笔记
  4. vpsmate安装
  5. MFC CEdit 自动换行功能
  6. JAVA程序改错 (易错题)
  7. python学习之列表语法
  8. 二、Spring——AoP
  9. hadoop环境搭建遇到问题集锦
  10. SPOJ #442 Searching the Graph
  11. 【Qt】Qt之进程间通信(IPC)【转】
  12. Linux安装后的系统配置
  13. 关于PIL库的一些概念
  14. cocos2d-x 几何绘制: DrawingPrimitives 和 CCDrawNode
  15. scheme 阴阳谜题
  16. hadoop笔记之Hive的数据类型
  17. Swing中弹出对话框的几种方式(转)
  18. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成)
  19. Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)
  20. VS编程,WPF单独更改TextBlock中部分文字格式的一种方法

热门文章

  1. app绘制手势密码 、九宫格分解
  2. centos7 初始化脚本
  3. 【liferay】4、liferay的权限体系
  4. flask_mail发送邮件(附源码)
  5. odoo开发笔记--字段追踪,消息通知机制
  6. LaTeX技巧:如何高效地将LaTeX代码转为Word公式
  7. Java实现二分法排序
  8. gitlab的md文件内使用锚点
  9. Mysql字符串转换为整型
  10. -bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_COLLATE: