不废话,调用代码:

         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. D3中的each() 以及svg defs元素 clipPath的使用

    each() 方法允许我们定制对选择集中DOM元素的处理行为: selection . each ( func ) 参数 func 是调用者定义的函数,在d3中被称为 访问器/accessor . d ...

  2. 用户注册登录系统 V2.0

    # 准备空列表 users = [] # 准备当前在线用户 online_user = {} while True: # 打印系统提示 print("欢迎使用 用户注册登录系统V2.0&qu ...

  3. Myeclipse按包装SVN

    最简单步骤:把features和plugins直接放到Myeclipse安装包的dropins中,从新启动eclipse即可 features和plugins下载地址:http://pan.baidu ...

  4. Redis之实战篇(与Mybatis整合)

    摘要: 现在市面流行的java框架,一个是ssh(spring.struts2.hibernate),另一个是ssm(spring.springmvc.mybatis),由于之前已经有整合过ssm框架 ...

  5. java并发之读写锁ReentrantReadWriteLock的使用

    Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 读写锁:分为读 ...

  6. 计算器源码(数学式python)

    ''' ******************** 请计算表达式: 1 - 2 * ( (60-30 +(-40.0/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/1 ...

  7. 在JavaWeb项目中URL中字符串加密解密方案

    URL由来: 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 “http://www.abc.com”,但是没有希腊字母的网址“htt ...

  8. SVN客户端和服务器端下载地址

    https://sourceforge.net/projects/tortoisesvn/files/1.9.7/Application/TortoiseSVN-1.9.7.27907-x64-svn ...

  9. java之集合Collection详解之3

    package cn.itcast_03; public class Student { // 成员变量 private String name; private int age; // 构造方法 p ...

  10. map用法

    描述: map()会根据提供的参数对指定序列做映射. 语法: map(function,iterable) function:函数以参数列表中的每一个元素调用function函数,返回包含每次func ...