惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
V
V2EX
B
Blog RSS Feed
有赞技术团队
有赞技术团队
博客园 - Franky
美团技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
云风的 BLOG
云风的 BLOG
L
LangChain Blog
GbyAI
GbyAI
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
The Register - Security
The Register - Security
大猫的无限游戏
大猫的无限游戏
D
Docker
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
博客园_首页
A
About on SuperTechFans
J
Java Code Geeks
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Recent Announcements
Recent Announcements
G
Google Developers Blog
小众软件
小众软件
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
F
Full Disclosure
Jina AI
Jina AI
H
Help Net Security

博客园 - sunwugang

026.数据库Sqlserver解决远程连接问题 C# SqlSuger C# DataTableToList 批处理自动删除指定文件夹中的文件夹以及文件 C# 开机自启动批处理bat文件 C# 将exe可执行程序设置为开机自启动 025.数据库下载&win10安装注意事项 024 数据库信息查询 + 连接串配置 C# TextBox 新增文本并定位光标 C# base64转pdf + 上传至指定url C# 猜字谜 C# 闲来笔记 StringHelper--字符串左右添加指定字符 Vue学习笔记72--element ui Vue学习笔记71--histroy模式+hash模式 Vue学习笔记70--全局前置-路由守卫 + 后置路由守卫 + 独享守卫 + 组件内守卫 Vue学习笔记69--activated + deactivated Vue学习笔记68--缓存路由组件 Vue学习笔记67--编程式路由导航
C# Json操作
sunwugang · 2024-10-10 · via 博客园 - sunwugang
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Web.Script.Serialization;

namespace HS.Common.Helper
{
    public class JsonHelper
    {
        //定义一个用于保存静态变量的实例
        private static JsonHelper instance = null;
        //定义一个保证线程同步的标识
        private static readonly object locker = new object();
        //构造函数为私有,使外界不能创建该类的实例
        private JsonHelper() { }
        public static JsonHelper Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (locker)
                    {
                        if (instance == null) instance = new JsonHelper();
                    }
                }
                return instance;
            }
        }

        public string GetJsonValue(string json, string levelOne)
        {
            JObject jsonObj = JObject.Parse(json);

            return jsonObj.GetValue(levelOne).ToString();
        }

        public string GetJsonValue(string json, string levelOne, string levelTwo)
        {
            JObject jsonObj = JObject.Parse(json);

            return jsonObj[levelOne][levelTwo].ToString();
        }

        public string SetJsonValue(string json, string levelOne, string value="")
        {
            JObject jsonObj = JObject.Parse(json);
            jsonObj[levelOne] = value;
            return jsonObj.ToString();
        }

        public string SetJsonValue(string json, string levelOne, string levelTwo, string value="")
        {
            JObject jsonObj = JObject.Parse(json);
            jsonObj[levelOne][levelTwo] = value;
            return jsonObj.ToString();
        }

        /// <summary>
        /// 压缩转义
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public string CompressEscape(string json)
        {
            if (string.IsNullOrEmpty(json)) return string.Empty;
            return JsonConvert.SerializeObject(json);
        }

        /// <summary>
        /// 格式化json
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public string FormatJsonByStr(string json)
        {
            if (string.IsNullOrEmpty(json)) return string.Empty;
            Object jsonObject = JsonConvert.DeserializeObject(json);
            return JsonConvert.SerializeObject(jsonObject, Formatting.Indented);
        }

        /// <summary>
        /// 删除转义
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public string DelEscape(string json)
        {
            if (string.IsNullOrEmpty(json)) return string.Empty;
            // 将JSON字符串解析为C#对象
            return JsonConvert.DeserializeObject<object>(json).ToString();
        }

        public string StortJson(string json)
        {
            var dic = JsonConvert.DeserializeObject<SortedDictionary<string, object>>(json);
            SortedDictionary<string, object> keyValues = new SortedDictionary<string, object>(dic);
            keyValues.OrderBy(m => m.Key);//升序 把Key换成Value 就是对Value进行排序
                                          //keyValues.OrderByDescending(m => m.Key);//降序
            return JsonConvert.SerializeObject(keyValues);
        }

        /// <summary>
        /// 转换Dic 到Json
        /// </summary>
        /// <param name="dic"></param>
        /// <returns></returns>
        public string ConvertDicToJson(Dictionary<string, string> dic)
        {
            JObject json = new JObject();
            foreach (var item in dic.Keys)
            {
                json.Add(item, dic[item]);
            }
            return JsonConvert.SerializeObject(json, Formatting.Indented);
        }

        public string GetJson(object obj)
        {
            if (obj == null) return "";

            DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
            using (MemoryStream stream = new MemoryStream())
            {
                json.WriteObject(stream, obj);
                string szJson = Encoding.UTF8.GetString(stream.ToArray());
                return szJson;
            }
        }

        // 从一个对象信息生成Json串
        public string ObjectToJson(object obj)
        {
            return JsonConvert.SerializeObject(obj);
        }
        // 从一个Json串生成对象信息
        public object JsonToObject(string jsonString, object obj)
        {
            return JsonConvert.DeserializeObject(jsonString, obj.GetType());
        }

        public T Deserialize<T>(string json)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                return (T)serializer.ReadObject(ms);
            }
        }

        public List<T> JsonStringToList<T>(string jsonStr)
        {
            JavaScriptSerializer Serializer = new JavaScriptSerializer();
            List<T> objs = Serializer.Deserialize<List<T>>(jsonStr);
            return objs;
        }

        public bool IsValidJson(string strInput)
        {
            if (string.IsNullOrWhiteSpace(strInput)) { return false; }
            strInput = strInput.Trim();
            while (strInput.StartsWith(@"\") || strInput.StartsWith("'") || strInput.StartsWith("\""))
            {
                strInput = strInput.Substring(1);
            }
            while (strInput.EndsWith(@"\") || strInput.EndsWith("'") || strInput.EndsWith("\""))
            {
                strInput = strInput.Substring(0, strInput.Length - 1);
            }
            try
            {
                var obj = JsonConvert.DeserializeObject(strInput);
                return true;
            }
            catch
            {
                return false;
            }
        }




    }
}

部分接口应用示例:

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Demos
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnFormat_Click(object sender, EventArgs e)
        {
            string json = "{\"infcode\":\"0\",\"inf_refmsgid\":\"H61011600330202409180855405628\",\"recer_sys_code\":\"GXYTH \",\"refmsg_time\":\"20200730123541\",\"respond_time\":\"20200730123539\",\"err_msg\":\"\",\"warn_msg\":\"\",\"sign_no\":\"800600044\",\"output\":{\"orgCode\":\"1120\",\"orgName\":\"协议机构名称\",\"adm_time\":\"入院时间\",\"dscg_time\":\"出院日期\",\"dscg_trt_rslt\":\"出院原因\",\"diag_code\":\"出院诊断疾病编 码\",\"med_type\":\"11\",\"medfee_sumamt\":\"100\",\"setl_time\":\"20240912151515\",\"ipt_otp_no\":\"门诊/住院流水号\",\"medrcdno\":\"单据号\",\"inhosp_stas\":\"0\",\"msgid\":\"发送方报文 ID\"}}";

            JObject jsonObj = JObject.Parse(json);

            string str = GetJsonValue(json, "infcode");
            string str2 = GetJsonValue(json, "output", "dscg_time");

            this.txtJson.Text = str + str2;
            this.txtFormatJson.Text = SetJsonValue(json, "output", "dscg_time", "测试修改指定节点内容");
        }


        public string GetJsonValue(string json, string levelOne)
        {
            JObject jsonObj = JObject.Parse(json);

            return jsonObj.GetValue(levelOne).ToString();
        }

        public string GetJsonValue(string json, string levelOne, string levelTwo)
        {
            JObject jsonObj = JObject.Parse(json);

            return jsonObj[levelOne][levelTwo].ToString();
        }

        public string SetJsonValue(string json, string levelOne, string value="")
        {
            JObject jsonObj = JObject.Parse(json);
            jsonObj[levelOne] = value;
            return jsonObj.ToString();
        }

        public string SetJsonValue(string json, string levelOne, string levelTwo, string value="")
        {
            JObject jsonObj = JObject.Parse(json);
            jsonObj[levelOne][levelTwo] = value;
            return jsonObj.ToString();
        }



    }
}

补充信息:

/// <summary>
        /// 获取json指定属性值
        /// </summary>
        /// <param name="json">json信息</param>
        /// <param name="levelArr">层级|最多5级</param>
        /// <returns></returns>
        public string GetJsonValue(string json, params string[] levelArr)
        {
            string value = string.Empty;
            JObject jsonObj = JObject.Parse(json);
            if (levelArr.Length == 1) value = jsonObj.GetValue(levelArr[0]).ToString();
            if (levelArr.Length == 2) value = jsonObj[levelArr[0]][levelArr[1]].ToString();
            if (levelArr.Length == 3) value = jsonObj[levelArr[0]][levelArr[1]][levelArr[2]].ToString();
            if (levelArr.Length == 4) value = jsonObj[levelArr[0]][levelArr[1]][levelArr[2]][levelArr[3]].ToString();
            if (levelArr.Length == 5) value = jsonObj[levelArr[0]][levelArr[1]][levelArr[2]][levelArr[3]][levelArr[4]].ToString();
            return value;
        }

应用方式:

List<string> arr = new List<string>();
            arr.Add("output");
            arr.Add("ipt_otp_no");
            this.txtThree.Text = GetJsonValue(json,arr.ToArray());