zoukankan      html  css  js  c++  java
  • 无实体反序列化Json

    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

  • 相关阅读:
    [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)
    [BZOJ1271][WC2008]秦腾与教学评估(巧妙的二分)
    [BZOJ2879][Noi2012]美食节(最小费用最大流动态加边)
    [BZOJ1070][SCOI2007]修车(最小费用最大流)
    [BZOJ1211][HNOI2004]树的计数(Prufer序列)
    [BZOJ1406][AHOI2007]密码箱(数论)
    1、体验
    sublime 安装插件
    <a>标签中的href="javascript:;"就是去掉a标签的默认行为
    html 中的media属性
  • 原文地址:https://www.cnblogs.com/niuniu0108/p/9173779.html
Copyright © 2011-2022 走看看