首页 > 其他分享 >Json扩展方法

Json扩展方法

时间:2024-03-23 18:00:14浏览次数:21  
标签:return string 扩展 Value Json static key 方法

命名空间:

点击查看代码
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Linq;

类:

点击查看代码
   /// <summary>
    /// Json扩展方法
    /// </summary>
    public static class JsonExtends
    {
        private static LogHelper Log { get; } = new LogHelper("JsonExtends");

        public static T ToEntity<T>(this string val)
        {
            try
            {
                return JsonConvert.DeserializeObject<T>(val);
            }
            catch (Exception ex)
            {
                //Log.Error(ex);
                return default(T);
            }
        }

        //public static List<T> ToEntityList<T>(this string val)
        //{
        //    return JsonConvert.DeserializeObject<List<T>>(val);
        //}
        public static string ToJson<T>(this T entity, Formatting formatting = Formatting.None)
        {
            try
            {
                return JsonConvert.SerializeObject(entity, formatting);
            }
            catch (Exception ex)
            {
                //Log.Error(ex);

                return string.Empty;
            }

        }

        /// <summary>
        /// Json 格式化
        /// </summary>
        /// <param name="jsonStr">未格式化的Json字符串</param>
        /// <returns>格式化后的Json字符串</returns>
        public static string JsonFormatOut(this string jsonStr)
        {
            //格式化json字符串
            JsonSerializer serializer = new JsonSerializer();
            TextReader tr = new StringReader(jsonStr);
            JsonTextReader jtr = new JsonTextReader(tr);
            object obj = serializer.Deserialize(jtr);
            if (obj != null)
            {
                StringWriter textWriter = new StringWriter();
                JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
                {
                    Formatting = Formatting.Indented,
                    Indentation = 4,
                    IndentChar = ' '
                };
                serializer.Serialize(jsonWriter, obj);
                return textWriter.ToString();
            }
            else
            {
                return jsonStr;
            }
        }
        /// <summary>
        /// 通过Json数据中的key获取对应的Value 重名的获取第一个
        /// </summary>
        /// <typeparam name="T">所获取数据的数据类型</typeparam>
        /// <param name="jObject">JObject对象</param>
        /// <param name="key">key</param>
        /// <returns>key对应的Value  没有找到时返回null</returns>
        public static T GetValueByKey<T>(this JObject jObject, string key)
        {
            var tempValue = jObject.GetValue(key);
            if (tempValue != null)
            {
                return tempValue.Value<T>();
            }
            else
            {
                var enumerator = jObject.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    if (enumerator.Current.Value.HasValues)
                    {
                        if (enumerator.Current.Value is JObject)
                        {
                            T tempTValue = GetValueByKey<T>(enumerator.Current.Value as JObject, key);
                            if (tempTValue != null)
                            {
                                return tempTValue;
                            }
                        }
                        else if (enumerator.Current.Value is JArray)
                        {
                            JArray arrayObj = enumerator.Current.Value as JArray;
                            T tempTValue = GetValueByKey<T>(arrayObj as JArray, key);
                            if (tempTValue != null)
                            {
                                return tempTValue;
                            }
                        }
                    }
                }
            }

            return default(T);
        }

        /// <summary>
        /// 通过Json数据中的key获取对应的Value 重名的获取第一个
        /// </summary>
        /// <typeparam name="T">所获取数据的数据类型</typeparam>
        /// <param name="jObject">JObject对象</param>
        /// <param name="key">key</param>
        /// <returns>key对应的Value  没有找到时返回null</returns>
        public static T GetValueByKey<T>(this JToken jObject, string key)
        {
            var propChildren = jObject.Children().Cast<JProperty>();
            var matchProp = propChildren.FirstOrDefault(p => p.Name == key);
            if (matchProp != null)
            {
                return jObject.Value<T>(key);
            }

            return default(T);
        }


        /// <summary>
        /// 判断JToken中是否包含对应的字段或属性
        /// </summary>
        /// <param name="jToken">JToken  对应</param>
        /// <param name="peropertyName">字段或属性名称</param>
        /// <returns></returns>
        public static bool IsContainProp(this JToken jToken, string peropertyName)
        {
            var propChildren = jToken.Children().Cast<JProperty>();
            var matchProp = propChildren.FirstOrDefault(p => p.Name == peropertyName);
            if (matchProp != null)
            {
                return true;
            }

            return false;
        }

        /// <summary>
        /// 判断JObject中是否包含对应的字段或属性
        /// </summary>
        /// <param name="jObject">JToken  对应</param>
        /// <param name="peropertyName">字段或属性名称</param>
        /// <returns></returns>
        public static bool IsContainProp(this JObject jObject, string peropertyName)
        {
            var propChildren = jObject.Children().Cast<JProperty>();
            var matchProp = propChildren.FirstOrDefault(p => p.Name == peropertyName);
            if (matchProp != null)
            {
                return true;
            }

            return false;
        }




    }

标签:return,string,扩展,Value,Json,static,key,方法
From: https://www.cnblogs.com/tiancaige/p/18091485

相关文章

  • Python探索反距离加权空间插值方法的深度
    介绍反距离加权(IDW)是一种广泛用于地理信息系统(GIS)和环境科学的空间插值技术,用于根据附近位置的值估计任何位置的缺失值。其基本原理很直观:距离兴趣点较近的位置比距离较远的位置更相似。本文深入探讨了IDW的方法、应用、优势和局限性,深入探讨了其在空间分析中的重要......
  • 传统图像压缩方法的局限性
    目录传统方法的局限性端到端的基于学习的方法熵编码过程传统方法的局限性传统的方法基于分割的图像块,会产生伪影。编码器的各个组件之间依赖关系复杂,难以手动进行整体优化。单个模块得到较大提升后,模型整体可能不会有太大提高。端到端的基于学习的方法对模型整体进行联合......
  • 用索引"copyofRange(int[] arr, int from,int to)"复制数组中的数,形成新数组的方法
    publicclasstest2{publicstaticvoidmain(String[]args){//定义原数组int[]arr={1,2,3,4,5,6,7,8,9};//引用copyofRange方法复制元素到新数组中int[]newcopy=copyofRange(arr,3,7);//输出新数组for(inti=......
  • 外汇量化交易新手篇—获取实时外汇行情、黄金行情、贵金属行情数据的方法
    在外汇交易中,获取实时外汇行情、黄金行情、贵金属行情数据可以通过以下方法进行:外汇交易平台:大多数外汇交易平台都提供实时的外汇、黄金、贵金属等行情数据。您可以在交易平台上查看实时报价,监控市场走势并进行交易操作。常用的外汇交易平台包括MetaTrader4(MT4)、MetaTrader......
  • 实时汇率API查询接口接入方法:支持逐笔报价、批量订阅、历史日K线、周K、月K
    在进行量化回测时,确实需要支持逐笔报价、批量订阅、以及获取历史日K线、周K线、月K线等功能,这些功能对于编写有效的交易策略和分析市场数据至关重要。一般来说,在进行量化回测时,我们可以选择使用专业的量化交易平台或软件,这些平台通常会提供相应的API接口来支持逐笔报价、批量订阅......
  • Multisim修改快捷键的方法
    记录一下学习Multisim的一些技巧(如果有帮助,请点一个免费的赞)1、选择状态栏选项中的自定义界面,或者右键状态栏,找到底部的自定义界面2、选择类别,选择命令,进行编辑注意:关闭自定义界面在重新打开时,会自动进入全局编辑状态(不出现窗口),建议一次性更改,或重启软件进行修改。补:如何......
  • Python常用模块(random随机模块&json序列化模块)
    1.random随机模块返回两数之间的随机数,不包括尾数:random.randrange()importrandomprint(random.randrange(1,10))#3返回两数之间的随机数,包括尾数:random.randint()importrandomprint(random.randint(1,10))#返回1-10之间的一个随机数,包括10#7随机选取0到100间......
  • Java中使用fastJson
     FastJson简介Fastjson是阿里巴巴开发的一个开源Java库,用于处理JSON数据,广泛应用于Web服务、API接口、数据交换等多个场景。FastJson的作用主要作用是用于将Java对象转换为JSON格式,或将JSON字符串转换为Java对象。它可以操作任何Java对象。主要特性有:.a.高性能:采......
  • 蓝桥杯嵌入式(STM32G431RBT6)——扩展板——IC采集频率(PUSL1、PUSL2)
    1.原理图2.Cubemx配置3.代码(1)timer.c#include"timer.h"unsignedintPUSL1_frq_T2CH2=0;unsignedintPUSL2_frq_T2CH3=0;uint32_tuwIC2Value1_T2CH2=0;//第一次捕获上升沿的时间uint32_tuwIC2Value2_T2CH2=0;//第二次捕获上升沿的时间uint32_tu......
  • node.js是什么怎么用常用方法
    什么是node.jsNode.js是一个基于ChromeV8JavaScript引擎的服务器端运行环境。它允许使用JavaScript来开发高性能的网络应用程序。Node.js采用事件驱动、非阻塞式I/O模型,使其能够处理大量并发请求而不会出现阻塞。Node.js最初是由RyanDahl于2009年创建的,旨在使JavaScrip......