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. K - Heavy Cargo dijkstar

    来源poj2263 Big Johnsson Trucks Inc. is a company specialized in manufacturing big trucks. Their lates ...

  2. 防止vue文件中的样式出现‘污染’情况(html5 scoped特性)

    近期在项目中出现了vue样式污染的情况: 一个页面刚进去时样式不正常,刷新之后,样式才才达到预期那样 在vue中,如果把样式写在vue文件的 style中,可能会出现样式污染的情况,这是要把写样式的标 ...

  3. pro.antd.design

    有关react的ui组建antd.design新推出的pro版本,最近用到了路由方面. common与routes; 首先需要在menu.js里面配置: { name: '精品', icon: 'da ...

  4. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  5. Linux中找到占用cpu最高的线程

    在工作中,经常会碰到CPU占用100%的情况,那如何找到是那个线程占用了cpu呢? 1. top命令,找到cpu占用最高的进程 2. 查看该进程的线程, top  -p <pid> 3. ...

  6. Q: Is Consul eventually or strongly consistent?

    强一致  最终一致 Frequently Asked Questions - Consul by HashiCorp https://www.consul.io/docs/faq.html Q: Is ...

  7. python扫描端口脚本

    # -*- coding:utf8 -*- # # Python: 2.7.8 # Platform: Windows # Authro: wucl # Program: 端口扫描 # History ...

  8. 万能的DBHelper帮助类

    DBHelper类: 简单的理解就是一个工具箱,我要用锤子的时候就在里面拿,我要用剪刀的时候也可以在里面拿,前提是我们写的DBHelper够不够强大! 软件中的四大功能:增.删.改.查  我们要实现这 ...

  9. HttpResponse输出文件

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx. ...

  10. The Designer (笛卡尔定理+韦达定理 || 圆的反演)

    Nowadays, little haha got a problem from his teacher.His teacher wants to design a big logo for the ...