.Net 的动态对象(二)动态解析Json(JObject)

.Net 的动态对象(二)动态解析Json(JObject)

在定义好了对象的类型后,通过NewtonJson我们可以方便的对一个对象进行序列化和反序列化。

在对象里面的属性不好定义,或者不好确定的情况下,我们也可以直接把我们要反序列化的对象当做Objcet处理,但是这样后续的操作就十分的不变,比如你要使用对象里面的某个属性的时候

通过JObject和JArray来动态解析JSON对象,使它很容易创建和检索的JSON内容而无需基础类型

private string str = "{\"platform\":\"all\",\"audience\":{\"tag\":[\"深圳\",\"北京\"]},\"notification\":{\"android\":{\"alert\":\"Hi, JPush!\",\"title\":\"Send to Android\",\"builder_id\":1,\"extras\":{\"newsid\":321}},\"ios\":{\"alert\":\"Hi, JPush!\",\"sound\":\"default\",\"badge\":\"+1\",\"extras\":{\"newsid\":321}}},\"message\":{\"msg_content\":\"Hi,JPush\",\"content_type\":\"text\",\"title\":\"msg\",\"extras\":{\"key\":\"value\"}},\"sms_message\":{\"content\":\"sms msg content\",\"delay_time\":3600},\"options\":{\"time_to_live\":60,\"apns_production\":false,\"apns_collapse_id\":\"jiguang_test_201706011100\"}}"; public void Execute() { //str 是一串结构层级比较多,且Key又不是很确定的Json串,这种情况当然用Objcet可以反序列化、用Dictionary<string,object>也可以, //但肯定都没有JObject方便,特别是在Get、Set的时候 dynamic model = JObject.Parse(str); if (model.audience != null) { var tag = model.audience.tag;//在不定义类型的情况下我们就将tag 属性取出来了,十分的方便 //将我们要赋值的数组转换成JArray 直接赋值就可以了 var tags = new string[] { "x", "y" }; model.audience.tag = JArray.FromObject(tags); // 将我们要赋值的对象转换成JObject 直接赋值就可以了 var datas = new { name = "xx", org="yy" }; model.audience = JObject.FromObject(datas); } }

转载于:https://www.cnblogs.com/PenZ/p/10318220.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101152.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何使用Fiddler模拟弱网情况对app进行测试「建议收藏」

    前言很多时候,我们需要在弱网情况下,对app进行测试,不可能将app放置到离路由器很远的地方,这里可以模拟弱网来测试app。那么,我们这里使用Fiddler工具来模拟弱网。使用speedtest在线测速工具来测试网络。一、Fiddler工具连接手机,设置代理打开Fiddler,进入到Tools—>options,如图所示:再次选择Connection

    2022年4月10日
    63
  • c语言头文件cstring,头文件 <string.h> <cstring> <string> 区别

    c语言头文件cstring,头文件 <string.h> <cstring> <string> 区别/**@filecstring*ThisisaStandardC++Libraryfile.Youshould@c\#includethisfile*inyourprograms,ratherthananyofthe@a*.himplementationfiles.**ThisistheC++versionoftheSt…

    2025年11月3日
    5
  • post-layout时序仿真_padstart

    post-layout时序仿真_padstartString.prototype.padStart把指定字符串填充到字符串头部,返回新字符串。语法str.padStart(targetLength[,padString])targetLength当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。padString可选填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的默认值为””示例’abc’.padStart(10);

    2025年10月16日
    3
  • 解决spark日志清理问题

    解决spark日志清理问题

    2021年11月27日
    180
  • 15.6寸键盘的详细介绍「建议收藏」

    键盘的详细介绍前言:1.对于新手,快速掌握键盘按键的功能,可以方便些2.对于老手,可以了解键盘其他按键的功能。拓展一些知识3.本篇文章是以自己笔记本电脑为例写的,由于不同品牌,不同尺寸,不同操作系统可能存在一些差异。工具:雷神15.6寸笔记本电脑操作系统:Windows10家庭中文版介绍导图:文章介绍导图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6M7ul7c-1611294020666)(https://gitee.com/lh-greenbir

    2022年4月14日
    55
  • 【Linux】环境变量设置[通俗易懂]

    【Linux】环境变量设置

    2022年1月24日
    139

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号