『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定
不废话,调用代码:
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动态数据绑定的更多相关文章
- js数组,字符串,json互相转换函数有哪些
js数组,字符串,json互相转换函数有哪些 一.总结 一句话总结: JSON.stringify(arr) JSON.parse(jsonString) str.split('') array.jo ...
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
- C#动态调用C++编写的DLL函数
C#动态调用C++编写的DLL函数 动态加载DLL需要使用Windows API函数:LoadLibrary.GetProcAddress以及FreeLibrary.我们可以使用DllImport在C ...
- python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal
一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...
- 分享基于.NET动态编译&Newtonsoft.Json封装实现JSON转换器(JsonConverter)原理及JSON操作技巧
看文章标题就知道,本文的主题就是关于JSON,JSON转换器(JsonConverter)具有将C#定义的类源代码直接转换成对应的JSON字符串,以及将JSON字符串转换成对应的C#定义的类源代码,而 ...
- OpenLayers学习笔记(十)— 动态加载JSON数据模拟航迹线
在openlayers 3 上,加载本地json数据,动态绘制航迹线,以飞机当前位置为地图中心,此例子是模拟DEMO 本文链接:动态加载JSON数据模拟航迹线 作者:狐狸家的鱼 GitHub:八至 前 ...
- 在C#中,Newtonsoft.Json + dynamic动态解析jsonString,jsonString转实体
记录一下 引用 using Newtonsoft.Json; using Newtonsoft.Json.Linq; var jsonString = "{\"ApiResourc ...
- 『实践』Yalmip获取对偶函数乘子
『实践』Yalmip获取对偶函数乘子 一.sdpsetting设置 Yalmip网站给出的说明 savesolveroutput默认为0,需要设置为1才会保存输出结果. 下面是我模型的约束个数: 二. ...
- 函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)
1. 函数参数--动态传参 昨天已经解过了传参, 如果需要给一个函数传参,而参数又是不确定的. 或者我们给一个函数传很多参数, 我的形参就要写很多, 写起来就很麻烦, 这时我们可以考虑使用动态参数.形 ...
随机推荐
- Spring使用 --- 基本概念(一):DI,依赖注入
Table of Contents 什么是依赖注入 怎样使用 什么时候使用 好处 本文讲述sprint基本概念之一: DI, 即依赖注入. 什么是依赖注入 说类A依赖于类B,最简单的例子是类A有一个类 ...
- session熟知
Session 服务器端保存会话信息的技术. //如何获得session HttpSession session = request.getSession(); //如何操作session sessi ...
- Java IO基础总结
Java中使用IO(输入输出)来读取和写入,读写设备上的数据.硬盘文件.内存.键盘......,根据数据的走向可分为输入流和输出流,这个走向是以内存为基准的,即往内存中读数据是输入流,从内存中往外写是 ...
- QTP自动化测试流程
1)准备TestCase - 在进行自动化之前,将测试内容进行文档化,不建议直接录制脚本 - 在录制脚本之前设计好脚本,便于录制过程的流畅 - 由于测试用例设 ...
- iOS常用控件尺寸大集合
元素控件 尺寸(pts) Window(含状态栏) 320 x 480 Status Bar的高度 20 Navigation Bar的高度 44 含Prompt的Navigation Bar的高度 ...
- java基础-学java util类库总结
JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...
- Windows下配置 Nginx + PHP
背景 经常倒腾系统,徘徊于 Windows 的便利和 Linux 的魔性,一旦折腾系统基本配置都要重弄,特此记录对 Nginx和PHP的基本启动.重启和退出 网上经验 网上这种东西一搜一大把,也有很多 ...
- Axios 中文说明
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. Features 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http ...
- SVN学习之windows下svn的安装
svn是apache的一个开源项目,全称为subversion.是一个基于版本的项目管理软件,一般在多人开发的项目中使用,目前svn已经替代了原来的cvs.大多数情况下,svn服务安装在linux服务 ...
- anguments
anguments是一个对象,长得很像数组的对象,但不是数组,而是伪数组. arguments的内容是函数运行时的实参列表 (function(d, e, f) { console.log(argum ...