public class ExectendHelp
{
private int index = 0;
public void GetLast(JObject obj, ref JToken token, string key)
{
JToken t = null;
string[] arr = key.Split('.');
int length = arr.Length;
if (index != length)
{
string strArr = arr[index++];
if (strArr.IndexOf('[') >= 0)
{
string[] strArrItem = strArr.Replace("]", "").Split('[');
if (index == arr.Length)
{
token = obj[strArrItem[0]][Convert.ToInt32(strArrItem[1])];
}
else
{
t = obj[strArrItem[0]][Convert.ToInt32(strArrItem[1])];
JObject jj = (JObject)t;
GetLast(jj, ref token, key);
}
}
else
{
if (index == arr.Length)
{
token = obj[strArr];
}
else
{
t = obj[strArr];
JObject jj = (JObject)t;
GetLast(jj, ref token, key);
}
}
}
}
}

/// <summary>
/// 反序列化Json得到指定键名的值
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static object GetValueForJson(this string json, string key)
{
int length = key.Split('.').Length;
object obj = null;
if (length == 0)
{
obj = null;
}
else
{
dynamic DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
JObject array = DynamicObject;
JToken token = null;
ExectendHelp ExectendHelp = new ExectendHelp();
ExectendHelp.GetLast(array, ref token, key);
obj = token.Value<object>();
}
return obj;
}

private static T GetValueForJson<T>(this string json, string key)
{
int length = key.Split('.').Length;
T obj = default(T);
if (length != 0)
{
dynamic DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
JObject array = DynamicObject;
JToken token = null;
ExectendHelp ExectendHelp = new ExectendHelp();
ExectendHelp.GetLast(array, ref token, key);
obj = token.Value<T>();
}
return obj;
}

public static string UpdateValueForJson(this string json, string key, object obj)
{
return string.Empty;
}

/// <summary>
/// 得到数组
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static Array GetArray(this string json, string key)
{
Array arr = GetValueForJson<Array>(json, key);
return arr;
}

/// <summary>
/// 得到String数组
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static string[] GetStringArray(this string json, string key)
{
string[] strArr = GetValueForJson<string[]>(json, key);
return strArr;
}

/// <summary>
/// 得到String数组
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static int[] GetIntArray(this string json, string key)
{
int[] intArr = GetValueForJson<int[]>(json, key);
return intArr;
}

/// <summary>
/// 得到Sting字符串
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static string GetString(this string json, string key)
{
string str = GetValueForJson<string>(json, key);
return str;
}

/// <summary>
/// 得到数字
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static int GetInt(this string json, string key)
{
int i = GetValueForJson<int>(json, key);
return i;
}

/// <summary>
/// 得到时间
/// </summary>
/// <param name="json">操作的Json字符串</param>
/// <param name="key">键名</param>
/// <returns></returns>
public static DateTime GetDateTime(this string json, string key)
{
DateTime DateTime = GetValueForJson<DateTime>(json, key);
return DateTime;
}

也可以参考 https://www.cnblogs.com/klsw/p/5904573.html

无实体反序列化Json的更多相关文章

  1. C#序列化及反序列化Json对象通用类JsonHelper

    当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...

  2. Java基础/利用fastjson反序列化json为对象和对象数组

    利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...

  3. Jackson序列化和反序列化Json数据完整示例

    Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...

  4. json数组的序列化和反序列化json数组的序列化和反序列化

    如题,我就不多说了,自己看代码的,很好理解 using System; using System.Collections.Generic; using System.Web; using System ...

  5. .NET中如何使用反序列化JSON字符串/序列化泛型对象toJsonStr

    在进行 .NET Web MVC 框架开发的网站程序的时候,我们都会遇到最关键的问题,数据传输.   .NET MVC 4中的ControllerBase类建议我们用ViewBag动态数据字典形式(t ...

  6. Newtonsoft.Json.dll反序列化JSON字符串的方法

      1.直接反序列化JSON字符串 //引用序列化.反序列化JSON字符串用到的空间 using Newtonsoft.Json; using Newtonsoft.Json.Linq; //定义一个 ...

  7. C# 实体转为json字符串

    C# 实体转为json字符串 Catalog cata = new Catalog(); cata.C_platformid = 0; cata.C_isnav = 0; cata.C_isvalid ...

  8. jackson实体转json时 为NULL不参加序列化的汇总

    首先加入依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson ...

  9. c#,Model 实体转json,字符串转json

    public class JsonF { #region 字符串转json /// <summary> /// 字符串转json /// </summary> /// < ...

随机推荐

  1. 使用Lifecycle管理Tomcat中组件的生命周期

    大型软件和汽车制造工厂一样,组件繁多,关系复杂,相互协同完成了汽车的生产过程.软件中的Object就像是工厂中component一样. 下面来看看相关的类和接口: abstract class Lif ...

  2. 事件Event

    信号量可以控制一个或多个进程同时进行阻塞或执行. 一个事件被创建后,默认是阻塞状态. from multiprocessing import Event e = Event() # 创建一个事件,默认 ...

  3. G - Throw nails

    来源hde4393 The annual school bicycle contest started. ZL is a student in this school. He is so boring ...

  4. D2

    Cosmic Cleaner: 为什么大家都知道球缺怎么求,我没听说过啊??? 我真的是印象里今天第一次听说球缺这个东西啊... 我一看,哇,神仙几何题,毫无头绪,投了投了,然后就被过穿了??? tl ...

  5. 补充:javascript

    写法分类:1.行内(内联)写在标签里面,以属性的形式表现,属性名是事件属性名例如:<button onClick="js代码"></button>2.内嵌写 ...

  6. python全栈开发 * 34知识点汇总 * 180719

    文件上传下载:一.文件上传(内容较少)服务器:(代码) import socket import json sk=socket.socket() sk.bind(("127.0.0.1&qu ...

  7. git使用记录_备忘

    ---恢复内容开始--- 一.将本地的文件上传到git 1.cd 本地文件目录 2.git init git init 命令使git命令可以管理当前的目录 3.git remote add origi ...

  8. [No0000D1]WPF—TreeView无限极绑定集合形成树结构

    1.如图所示:绑定树效果图 2.前台Xaml代码: <Window x:Class="WpfTest.MainWindow" xmlns="http://schem ...

  9. 【转】前端框架天下三分:Angular React 和 Vue的比较

    前端框架天下三分:Angular React 和 Vue的比较 原文链接:http://blog.csdn.net/haoshidai/article/details/52346865 前端这几年的技 ...

  10. NodeJS笔记(三)-创建第一个NodeJS web项目 Express

    参考:Express的安装 先创建一个文件夹专门存放NodeJS项目,这里以“E:\NodeJSProject”为例 CMD指向该目录 执行以下命名 mkdir expressdemo cd expr ...