最近做一个项目,需要解析由JSon转换过来的dynamic对象,JSon的解析可以直接使用fastJSon,但是如果不知道具体对象的话,后续的取值总是需要重复性的解析dynamic对象,很是麻烦,后来自己写了一个函数从数据结构的层面对dynamic进行解析,函数代码如下,函数不难理解,但是在后续取值的时候方便了很多,取值时可仿照:o.GetValue("Name"),则会返回对象o中key值为“Name”的Value,不管这个key嵌套多深:

         /// <summary>
/// Gets the value.
/// </summary>
/// <param name="o">The object.</param>
/// <param name="key">The key.</param>
/// <returns>System.Object.</returns>
public static object GetValue(this object o,string key)
{
if(o is List<object>)
{
foreach(var oo in (List<object>)o)
{
var result= GetValue(oo, key);//递归返回匹配的值
if (result != null)
return result;
}
}
else if(o is object[])
{
foreach(var oo in (object[])o)
{
var result = GetValue(oo, key);//递归返回匹配的值
if (result != null)
return result;
}
}
else if (o is IDictionary<string, object>)
{
foreach (var property in (IDictionary<String, Object>)o)
{
if (property.Key == key || property.Key == key.ToLower() || property.Key == key.ToUpper())
return property.Value;
}
//如果上面的遍历没有结果,则该值可能嵌套在property.Value里面,需要递归解析
foreach (var property in (IDictionary<String, Object>)o)
{
var result = GetValue(property.Value, key);//递归返回匹配的值
if (result != null)
return result;
}
}
return null;//没有匹配值,返回null
}

希望可以帮助到遇到相同麻烦的童鞋~~

解析dynamic对象的更多相关文章

  1. 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象

    使用 dynamic 标记解析JSON字符串  http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...

  2. 无法解析指定对象的 TargetProperty (UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)“的异常解决

    最近在写动画的时候做一个倒计时的效果,就是数字从大到小的一个动画,但是当我设置要new PropertyPath("XXXXXXX")的时候却报了标题的异常,各种报错.百度了好久也 ...

  3. Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范

    Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范 文本内容 ###注释 标题:标题标题标题标题标题1 人数:5 月薪:2000-3000 内容: 内容内容内 容内容内容 ...

  4. 让FineUI数据绑定支持dynamic对象

    FineUI非常好用,但是有一个缺点,就是不支持dynamic对象的数据绑定.查了一下源代码,找了解决方案,其实只需要几行代码就可以搞定,这就是开源的好处. 本想直接在CodePlex上贡献代码,但不 ...

  5. JDynamic :支持Json反序列化为Dynamic对象

    JDynamic :支持Json反序列化为Dynamic对象   2010年 .NET 4.0 发布前后,从3.5向4.0迁移,那时也有一些异构系统的需求,主要是和PHP打交道,通信使用的HTTP 格 ...

  6. C#编译器对于dynamic对象到底做了什么

    private static void TestMethod() { //dynamic 仅仅是个占位符而已 dynamic p1 = , Y = }; //对dynamic对象p1的X属性访问通过C ...

  7. jquery遍历筛选数组的几种方法和遍历解析json对象

    jquery grep()筛选遍历数组 $().ready(    function(){        var array = [1,2,3,4,5,6,7,8,9];        var fil ...

  8. javascript如何解析json对javascript如何解析json对象并动态赋值到select列表象并动态赋值到select列表

    原文 javascript如何解析json对象并动态赋值到select列表 JSON(JavaScriptObject Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScri ...

  9. JavaScript使用浏览器内置XML解析器解析DOM对象

    所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 (可通过 JavaScript 操作的对象). 一.获取DOM对象 XMLHttpReq ...

随机推荐

  1. 多线程辅助类-CountDownLatch的用法

    转自:http://www.iteye.com/topic/1002652 CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方 ...

  2. RAM的分类

    转载自:http://wenku.baidu.com/view/b17d73244b35eefdc8d333ab.html RAM(随机存储器)可以分为SRAM(静态随机存储器)和DRAM(动态随机存 ...

  3. bzoj 3160 万径人踪灭 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3160 求出关于一个位置有多少对对称字母,如果 i 位置有 f[i] 对,对答案的贡献是 2^ ...

  4. Spring 注释标签@Resource @Autowired 和@Inject的区别

    一些spring的开发人员在使用这三个标签进行注入的时候感到困惑.我来尝试解释一下这三个注解的主要区别.事实上,这三者非常相似,只存在一些微小的差别.在稍后的文章中会进行解释. @Resource-在 ...

  5. Linux--top命令查看系统状态,所有值讲解

    Linux系统可以通过top命令查看系统的CPU.内存.运行时间.交换分区.执行的线程等信息.通过top命令可以有效的发现系统的缺陷出在哪里.是内存不够.CPU处理能力不够.IO读写过高. 一.top ...

  6. js遍历checkbox获取数据

    function GetCurrenetPoint() { debugger var currentTypes = ""; var display = $("#input ...

  7. CNN相关资料

    转子http://blog.csdn.net/qianqing13579/article/details/71076261 前言 入职之后,逐渐转到深度学习方向.很早就打算写深度学习相关博客了,但是由 ...

  8. B - Equidistant String

    B - Equidistant String Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & % ...

  9. PHP中正则表达式学习及应用(三)

    正则表达式中的“模式修正符” 1.运算顺序    2.模式修正符 i 正则内容在匹配时候不区分大小写(默认是区分的) 例如: <?php $mode="/[a-z]/i"; ...

  10. spown mj

    local function getmjvalnew(key) local keynew = {} local sumnval = 0 for _, v in ipairs(key) do if v& ...