不废话,调用代码:

         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. gradle 将依赖打入Jar包的方法

    使用的是IDEA,直接引入 plugins { id 'com.github.johnrengelman.shadow' version '1.2.3' } 放在build.gradle的最上面,然后 ...

  2. System.Drawing.image 与ImageSource 互转

    private BitmapSource bs(Bitmap bt) { IntPtr ip = bt.GetHbitmap(); BitmapSource bitmapSource = System ...

  3. 运用jieba库分词

    代码: 统计出团队中文简介中词频 import jieba txt=open("C:\\Users\\Administrator\\Desktop\\介绍.txt","r ...

  4. C++相关:C++的IO库

    前言 基本的IO库设施 istream(输入流类型),提供输入操作. ostream(输出流类型),提供输出操作. cin,一个istream对象,从标准输入读取数据. cout,一个ostream对 ...

  5. 【转】MySQL int转换成varchar引发的慢查询

    转自http://www.cnblogs.com/billyxp/archive/2013/05/31/3110016.html 最近一周接连处理了2个由于int向varchar转换无法使用索引,从而 ...

  6. 出现“Unable to resolve target 'android-XXX'”怎么处理?

    这句话的中文意思就是说安卓API版本没有能适配22的,需要将sdk更新一下,必要的话,adt都要跟着更新,但就我尝试来看,还是要先更新adt,然后您或许发现,这个表单好不容易刷出来,但是没有我们想要的 ...

  7. 在webpack里使用jquery.mCustomScrollbar插件

    malihu-custom-scrollbar-plugin是一个依赖jquery的自定义网页滚动条样式插件 网站:http://manos.malihu.gr/jquery-custom-conte ...

  8. 搭建微信小程序服务

    准备域名和证书 任务时间:20min ~ 40min 小程序后台服务需要通过 HTTPS 访问,在实验开始之前,我们要准备域名和 SSL 证书. 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可 ...

  9. Connection reset by peer的常见原因

    1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer). Socket默认连接60秒 ...

  10. Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录

    Python 2.7 IDE Pycharm 5.0.3 Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客 PIL : Pillow-3.3.0-cp27-cp27 ...