C# Newtonsoft.Json反序列化为dynamic对象之后的使用
2024-08-24 23:09:13
通过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("");
最新文章
- python安装BeautifulSoup注意事项
- 在linux下Ant的环境配置
- Shader 学习笔记
- vpsmate安装
- MFC CEdit 自动换行功能
- JAVA程序改错 (易错题)
- python学习之列表语法
- 二、Spring——AoP
- hadoop环境搭建遇到问题集锦
- SPOJ #442 Searching the Graph
- 【Qt】Qt之进程间通信(IPC)【转】
- Linux安装后的系统配置
- 关于PIL库的一些概念
- cocos2d-x 几何绘制: DrawingPrimitives 和 CCDrawNode
- scheme 阴阳谜题
- hadoop笔记之Hive的数据类型
- Swing中弹出对话框的几种方式(转)
- “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成)
- Unity应用架构设计(4)——设计可复用的SubView和SubViewModel(Part 2)
- VS编程,WPF单独更改TextBlock中部分文字格式的一种方法
热门文章
- app绘制手势密码 、九宫格分解
- centos7 初始化脚本
- 【liferay】4、liferay的权限体系
- flask_mail发送邮件(附源码)
- odoo开发笔记--字段追踪,消息通知机制
- LaTeX技巧:如何高效地将LaTeX代码转为Word公式
- Java实现二分法排序
- gitlab的md文件内使用锚点
- Mysql字符串转换为整型
- -bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_COLLATE: