不废话,调用代码:

         static void Main(string[] args)
{
string json = File.ReadAllText("2.txt", Encoding.Default); object result = JsonConvert.DeserializeObject(json);
//dynamic result = JsonConvert.DeserializeObject<dynamic>(json); //这行函数 啥用都没有 //虽然 result 是 dynamic 定义, 但其实还是 JObject 类型 —— 这种类型是 Newtonsoft.Json 中的一个实体 //需要对 动态JSON 进行一个 转换
dynamic result2 = JsonObjectToDynamic(result);
dynamic text = result2.DKS.Text;
Console.WriteLine(text); //--------------------------------
//动态对象 测试
dynamic dyna = new DynamicModel();
dyna["Name"] = "张三";
dyna["Birthday"] = new DateTime(, , ); Console.WriteLine(dyna.Name);
Console.WriteLine(dyna.Birthday); }

运行截图:

完整Demo代码:

     class Program
{
static void Main(string[] args)
{
string json = File.ReadAllText("2.txt", Encoding.Default); object result = JsonConvert.DeserializeObject(json);
//dynamic result = JsonConvert.DeserializeObject<dynamic>(json); //这行函数 啥用都没有 //虽然 result 是 dynamic 定义, 但其实还是 JObject 类型 —— 这种类型是 Newtonsoft.Json 中的一个实体 //需要对 动态JSON 进行一个 转换
dynamic result2 = JsonObjectToDynamic(result);
dynamic text = result2.DKS.Text;
Console.WriteLine(text); //--------------------------------
//动态对象 测试
dynamic dyna = new DynamicModel();
dyna["Name"] = "张三";
dyna["Birthday"] = new DateTime(, , ); Console.WriteLine(dyna.Name);
Console.WriteLine(dyna.Birthday); } private static dynamic JsonObjectToDynamic(object jToken)
{
if (jToken == null) return null; if (jToken is JValue)
{
return ((JValue) jToken).Value;
}
else if (jToken is JArray)
{
dynamic list = new List<object>();
JArray array = (JArray)jToken; //JArray
if (array.HasValues)
{
foreach (object item in array) //JToken
{
object value = JsonObjectToDynamic(item);
list.Add(value);
}
}
return list;
}
//else if (string.Equals(typeName, "JContainer", StringComparison.InvariantCultureIgnoreCase)) //JObject JArray JConstructor 都继承自 JContainer
else if (jToken is JContainer)
{
DynamicModel hash = new DynamicModel();
JContainer container = (JContainer)jToken; //JContainer
if (container.HasValues)
{
foreach (JToken item in container) //JToken
{
if (item is JProperty)
{
JProperty itemProperty = (JProperty) item;
if (item.Type == JTokenType.Property)
hash[itemProperty.Name] = JsonObjectToDynamic(itemProperty.Value);
}
else
throw new Exception(string.Format("JsonObjectToDynamic(*) 函数缺陷, 未知类型: " + item.GetType()));
}
}
return hash;
} throw new Exception(string.Format("JsonObjectToDynamic(*) 函数缺陷, 未知类型: " + jToken.GetType()));
}
public class DynamicModel : DynamicObject
{
private Dictionary<string, object> m_Hash = new Dictionary<string, object>();
//private Dictionary<string, object> m_Hash = new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase); //不区分大小写 public object this[string key]
{
get
{
object value = null;
m_Hash.TryGetValue(key, out value);
return value;
}
set {
if (m_Hash.ContainsKey(key)) m_Hash[key] = value;
else m_Hash.Add(key, value);
}
} public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name;
return m_Hash.TryGetValue(name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
this[binder.Name] = value;
return true;
}
} }

『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定的更多相关文章

  1. js数组,字符串,json互相转换函数有哪些

    js数组,字符串,json互相转换函数有哪些 一.总结 一句话总结: JSON.stringify(arr) JSON.parse(jsonString) str.split('') array.jo ...

  2. 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历

    异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...

  3. C#动态调用C++编写的DLL函数

    C#动态调用C++编写的DLL函数 动态加载DLL需要使用Windows API函数:LoadLibrary.GetProcAddress以及FreeLibrary.我们可以使用DllImport在C ...

  4. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  5. 分享基于.NET动态编译&Newtonsoft.Json封装实现JSON转换器(JsonConverter)原理及JSON操作技巧

    看文章标题就知道,本文的主题就是关于JSON,JSON转换器(JsonConverter)具有将C#定义的类源代码直接转换成对应的JSON字符串,以及将JSON字符串转换成对应的C#定义的类源代码,而 ...

  6. OpenLayers学习笔记(十)— 动态加载JSON数据模拟航迹线

    在openlayers 3 上,加载本地json数据,动态绘制航迹线,以飞机当前位置为地图中心,此例子是模拟DEMO 本文链接:动态加载JSON数据模拟航迹线 作者:狐狸家的鱼 GitHub:八至 前 ...

  7. 在C#中,Newtonsoft.Json + dynamic动态解析jsonString,jsonString转实体

    记录一下 引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; var jsonString = "{\"ApiResourc ...

  8. 『实践』Yalmip获取对偶函数乘子

    『实践』Yalmip获取对偶函数乘子 一.sdpsetting设置 Yalmip网站给出的说明 savesolveroutput默认为0,需要设置为1才会保存输出结果. 下面是我模型的约束个数: 二. ...

  9. 函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)

    1. 函数参数--动态传参 昨天已经解过了传参, 如果需要给一个函数传参,而参数又是不确定的. 或者我们给一个函数传很多参数, 我的形参就要写很多, 写起来就很麻烦, 这时我们可以考虑使用动态参数.形 ...

随机推荐

  1. 全文检索-Lucene.net

    Lucene.net是Lucene的.net移植版本,在较早之前是比较受欢迎的一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎. ...

  2. PHP session有效期session.gc_maxlifetime详解

    一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期的sessio ...

  3. API管理平台XXL-API

    <API管理平台XXL-API> 一.简介 1.1 概述 XXL-API是一个简洁易用API管理平台,提供API的"管理"."文档"."M ...

  4. DevOps之二 Maven的安装与配置

    CentOS7 安装Maven 一.安装Maven mkdir -p /usr/local/maven3wget http://mirrors.hust.edu.cn/apache/maven/mav ...

  5. hadoop中setup,cleanup,run和context讲解

    hadoop 执行中的setup run cleanup context的作用1.简介1) setup(),此方法被MapReduce框架仅且执行一次,在执行Map任务前,进行相关变量或者资源的集中初 ...

  6. 14.Ubuntu基本命令

    vi编辑器 {  :上一段diamante } :下一段代码 dw: 删除一个单词 权限 前面的分三组 第一: 文件拥有者的权限 第二:同组者拥有的权限 第三:其他人拥有的权限 前面“-”表示是文件 ...

  7. SSM博客

    最近在写基于SSM 的博客,用的是spring+springmvc+mybatis搭建的,用的maven+github管理项目,目前完成了登录注册以及用户管理员的增删改查,后续的功能还需要完善,如何建 ...

  8. NetCore版RPC框架NewLife.ApiServer

    微服务和消息队列的基础都是RPC框架,比较有名的有WCF.gRPC.Dubbo等,我们的NewLife.ApiServer建立在网络库NewLife.Net之上,支持.Net Core,追求轻量级和高 ...

  9. 更新版PowerBI发布了-- Power BI Report Server Update – March 2018

    新版的PowerBI server 和 Desktop 终于发布了.  详细增加功能见以下链接: 下载最新版PowerBI Report Server: https://powerbi.microso ...

  10. PAT1029:Median

    1029. Median (25) 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given an incr ...