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. poj3087 Shuffle'm Up(模拟)

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10766   Accepted: 4976 Des ...

  2. python 接口自动化测试二(request.get)

    环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括: requests常用请求方法使用,包括:get,post requests库中的Session.Cookie的使用 其它 ...

  3. 清理孤儿文件 clearing up outdated orphans

    pacman -Rns $(pacman -Qtdq) It lists all packages installed as dependencies but no longer required b ...

  4. 设置弹窗、遮罩的样式设置(包括:left、heigh等)

    .zhezhao { width:100%; background-color:#000; filter:alpha(opacity=50); -moz-opacity:0.5; opacity:0. ...

  5. python 3 往Excel 中的写入内容但不覆盖原内容

    EXCEL 写入数据保持原样式 import xlwt import xlrd import xlutils import xlutils.copy class ExcelHandle(): def ...

  6. PHP(数据类型、水仙花数(重点)运算符)

    <!--三个弹窗 alert():打开页面只是提示一下,告警框 仅仅提示,关了就关了 confirm():选择框 有返回值 prompt():输入框 控制台输出console.log() 字符串 ...

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

    20175320 2018-2019-2 <Java程序设计>第4周学习总结 教材学习内容总结 本周学习了教材的第五章的内容.在这章中介绍了子类与继承,着重讲了子类继承的规则以及使用sup ...

  8. css学习_div+css布局

    1.布局(盒子布局.盒子模型.标准流.脱离文档流) 标准文档流:块级独占一行  ,行内块和行内元素都是和其他共占一行,在盒子中的元素遵循标准流从左到右从上到下排列,超过父元素时会溢出. 一行行看 浮动 ...

  9. usb_camera

  10. 1、js比较日期的大小

    ① html <div class="ptb10"><span>共享开始时间:</span><input type="text& ...