C#解析Json的类

C#利用Httphandler类接收HttpPost请求解析JSON类型数据 C#利用Httphandler类接收Http Post请求解析Rest JSON 类型数据 一.定义JSON数据 对象类 1. 根据Http Post请求传入的Json 数据格式,定义出对应的对象类。 比如,接收请求的json 数据如下: { "mvReelInfo": { "_PLANT_CODE":"KS4", "_LINE_NAME":"4SMTX", ... 阅读详情
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Web;  
  4. using System.Text.RegularExpressions;  
  5. using System.Text;  
  6.   
  7. namespace System.JSON  
  8. {  
  9.   
  10.     static class JSONConvert  
  11.     {  
  12.         #region 全局变量  
  13.   
  14.         private static JSONObject _json = new JSONObject();//寄存器   
  15.         private static readonly string _SEMICOLON = "@semicolon";//分号转义符   
  16.         private static readonly string _COMMA = "@comma"; //逗号转义符   
  17.  
  18.         #endregion  
  19.  
  20.         #region 字符串转义  
  21.         /// <summary>   
  22.         /// 字符串转义,将双引号内的:和,分别转成_SEMICOLON和_COMMA   
  23.         /// </summary>   
  24.         /// <param name="text"></param>   
  25.         /// <returns></returns>   
  26.         private static string StrEncode(string text)  
  27.         {  
  28.             MatchCollection matches = Regex.Matches(text, "///"[^///"]+///"");  
  29.             foreach (Match match in matches)  
  30.             {  
  31.                 text = text.Replace(match.Value, match.Value.Replace(":", _SEMICOLON).Replace(",", _COMMA));  
  32.             }  
  33.   
  34.             return text;  
  35.         }  
  36.   
  37.         /// <summary>   
  38.         /// 字符串转义,将_SEMICOLON和_COMMA分别转成:和,   
  39.         /// </summary>   
  40.         /// <param name="text"></param>   
  41.         /// <returns></returns>   
  42.         private static string StrDecode(string text)  
  43.         {  
  44.             return text.Replace(_SEMICOLON, ":").Replace(_COMMA, ",");  
  45.         }  
  46.  
  47.         #endregion  
  48.  
  49.         #region JSON最小单元解析  
  50.   
  51.         /// <summary>   
  52.         /// 最小对象转为JSONObject   
  53.         /// </summary>   
  54.         /// <param name="text"></param>   
  55.         /// <returns></returns>   
  56.         private static JSONObject DeserializeSingletonObject(string text)  
  57.         {  
  58.             JSONObject jsonObject = new JSONObject();  
  59.   
  60.             MatchCollection matches = Regex.Matches(text, "(///"(?<key>[^///"]+)///":///"(?<value>[^,///"]+)///")|(///"(?<key>[^///"]+)///":(?<value>[^,///"//}]+))");  
  61.             foreach (Match match in matches)  
  62.             {  
  63.                 string value = match.Groups["value"].Value;  
  64.                 jsonObject.Add(match.Groups["key"].Value, _json.ContainsKey(value) ? _json[value] : StrDecode(value));  
  65.             }  
  66.   
  67.             return jsonObject;  
  68.         }  
  69.   
  70.         /// <summary>   
  71.         /// 最小数组转为JSONArray   
  72.         /// </summary>   
  73.         /// <param name="text"></param>   
  74.         /// <returns></returns>   
  75.         private static JSONArray DeserializeSingletonArray(string text)  
  76.         {  
  77.             JSONArray jsonArray = new JSONArray();  
  78.   
  79.             MatchCollection matches = Regex.Matches(text, "(///"(?<value>[^,///"]+)/")|(?<value>[^,//[//]]+)");  
  80.             foreach (Match match in matches)  
  81.             {  
  82.                 string value = match.Groups["value"].Value;  
  83.                 jsonArray.Add(_json.ContainsKey(value) ? _json[value] : StrDecode(value));  
  84.             }  
  85.   
  86.             return jsonArray;  
  87.         }  
  88.   
  89.         /// <summary>   
  90.         /// 反序列化   
  91.         /// </summary>   
  92.         /// <param name="text"></param>   
  93.         /// <returns></returns>   
  94.         private static string Deserialize(string text)  
  95.         {  
  96.             text = StrEncode(text);//转义;和,   
  97.   
  98.             int count = 0;  
  99.             string key = string.Empty;  
  100.             string pattern = "(//{[^//[//]//{//}]+//})|(//[[^//[//]//{//}]+//])";  
  101.   
  102.             while (Regex.IsMatch(text, pattern))  
  103.             {  
  104.                 MatchCollection matches = Regex.Matches(text, pattern);  
  105.                 foreach (Match match in matches)  
  106.                 {  
  107.                     key = "___key" + count + "___";  
  108.   
  109.                     if (match.Value.Substring(0, 1) == "{")  
  110.                         _json.Add(key, DeserializeSingletonObject(match.Value));  
  111.                     else  
  112.                         _json.Add(key, DeserializeSingletonArray(match.Value));  
  113.   
  114.                     text = text.Replace(match.Value, key);  
  115.   
  116.                     count++;  
  117.                 }  
  118.             }  
  119.             return text;  
  120.         }  
  121.  
  122.         #endregion  
  123.  
  124.         #region 公共接口  
  125.   
  126.         /// <summary>   
  127.         /// 序列化JSONObject对象   
  128.         /// </summary>   
  129.         /// <param name="text"></param>   
  130.         /// <returns></returns>   
  131.         public static JSONObject DeserializeObject(string text)  
  132.         {  
  133.             _json = new JSONObject();  
  134.             return _json[Deserialize(text)] as JSONObject;  
  135.         }  
  136.   
  137.         /// <summary>   
  138.         /// 序列化JSONArray对象   
  139.         /// </summary>   
  140.         /// <param name="text"></param>   
  141.         /// <returns></returns>   
  142.         public static JSONArray DeserializeArray(string text)  
  143.         {  
  144.             _json = new JSONObject();  
  145.             return _json[Deserialize(text)] as JSONArray;  
  146.         }  
  147.   
  148.         /// <summary>   
  149.         /// 反序列化JSONObject对象   
  150.         /// </summary>   
  151.         /// <param name="jsonObject"></param>   
  152.         /// <returns></returns>   
  153.         public static string SerializeObject(JSONObject jsonObject)  
  154.         {  
  155.             StringBuilder sb = new StringBuilder();  
  156.             sb.Append("{");  
  157.             foreach (KeyValuePair<string, object> kvp in jsonObject)  
  158.             {  
  159.                 if (kvp.Value is JSONObject)  
  160.                 {  
  161.                     sb.Append(string.Format("/"{0}/":{1},", kvp.Key, SerializeObject((JSONObject)kvp.Value)));  
  162.                 }  
  163.                 else if (kvp.Value is JSONArray)  
  164.                 {  
  165.                     sb.Append(string.Format("/"{0}/":{1},", kvp.Key, SerializeArray((JSONArray)kvp.Value)));  
  166.                 }  
  167.                 else if (kvp.Value is String)  
  168.                 {  
  169.                     sb.Append(string.Format("/"{0}/":/"{1}/",", kvp.Key, kvp.Value));  
  170.                 }  
  171.                 else  
  172.                 {  
  173.                     sb.Append(string.Format("/"{0}/":/"{1}/",", kvp.Key, ""));  
  174.                 }  
  175.             }  
  176.             if (sb.Length > 1)  
  177.                 sb.Remove(sb.Length - 1, 1);  
  178.             sb.Append("}");  
  179.             return sb.ToString();  
  180.         }  
  181.   
  182.         /// <summary>   
  183.         /// 反序列化JSONArray对象   
  184.         /// </summary>   
  185.         /// <param name="jsonArray"></param>   
  186.         /// <returns></returns>   
  187.         public static string SerializeArray(JSONArray jsonArray)  
  188.         {  
  189.             StringBuilder sb = new StringBuilder();  
  190.             sb.Append("[");  
  191.             for (int i = 0; i < jsonArray.Count; i++)  
  192.             {  
  193.                 if (jsonArray[i] is JSONObject)  
  194.                 {  
  195.                     sb.Append(string.Format("{0},", SerializeObject((JSONObject)jsonArray[i])));  
  196.                 }  
  197.                 else if (jsonArray[i] is JSONArray)  
  198.                 {  
  199.                     sb.Append(string.Format("{0},", SerializeArray((JSONArray)jsonArray[i])));  
  200.                 }  
  201.                 else if (jsonArray[i] is String)  
  202.                 {  
  203.                     sb.Append(string.Format("/"{0}/",", jsonArray[i]));  
  204.                 }  
  205.                 else  
  206.                 {  
  207.                     sb.Append(string.Format("/"{0}/",", ""));  
  208.                 }  
  209.   
  210.             }  
  211.             if (sb.Length > 1)  
  212.                 sb.Remove(sb.Length - 1, 1);  
  213.             sb.Append("]");  
  214.             return sb.ToString();  
  215.         }  
  216.         #endregion  
  217.     }  
  218.   
  219.     /// <summary>   
  220.     /// 取出JSON对象类   
  221.     /// </summary>   
  222.     public class JSONObject : Dictionary<string, object>  
  223.     {  
  224.         public new void Add(string key, object value)  
  225.         {  
  226.             System.Type t = value.GetType();  
  227.   
  228.             if (t.Name == "String")  
  229.             {  
  230.                 value = JSONEncode.StrEncodeForDeserialize(value.ToString());  
  231.             }  
  232.   
  233.             base.Add(key, value);  
  234.         }  
  235.         public override string ToString()  
  236.         {  
  237.             return JSONConvert.SerializeObject(this);  
  238.         }  
  239.         public static JSONObject FromObject(string json)  
  240.         {  
  241.             return JSONConvert.DeserializeObject(json);  
  242.         }  
  243.     }  
  244.   
  245.     /// <summary>   
  246.     /// 取出JSON数组类   
  247.     /// </summary>   
  248.     public class JSONArray : List<object>  
  249.     {  
  250.         public new void Add(object item)  
  251.         {  
  252.             System.Type t = item.GetType();  
  253.   
  254.             if (t.Name == "String")  
  255.             {  
  256.                 item = JSONEncode.StrEncodeForDeserialize(item.ToString());  
  257.             }  
  258.   
  259.             base.Add(item);  
  260.         }  
  261.         public override string ToString()  
  262.         {  
  263.             return JSONConvert.SerializeArray(this);  
  264.         }  
  265.         public JSONArray FromObject(string json)  
  266.         {  
  267.             return JSONConvert.DeserializeArray(json);  
  268.         }  
  269.     }  
  270.   
  271.     /// <summary>   
  272.     /// 字符串转义,将"{"、"}"、"""   
  273.     /// </summary>   
  274.     public class JSONEncode  
  275.     {  
  276.         public static readonly string _LEFTBRACES = "@leftbraces";//"{"转义符   
  277.         public static readonly string _RIGHTBRACES = "@rightbraces";//"}"转义符   
  278.         public static readonly string _LEFTBRACKETS = "@leftbrackets";//"["转义符   
  279.         public static readonly string _RIGHTBRACKETS = "@rightbrackets";//"]"转义符   
  280.         public static readonly string _DOUBLEQUOTATIONMARKS = "@doubleQuotationMarks";//"""转义符   
  281.  
  282.  
  283.         #region 字符串转义  
  284.         /// <summary>   
  285.         /// 字符串转义,将"{"、"}"、""",分别转换_LEFTBRACES、_RIGHTBRACES、_DOUBLEQUOTATIONMARKS   
  286.         /// </summary>   
  287.         /// <param name="text"></param>   
  288.         /// <returns></returns>   
  289.         public static string StrEncodeForDeserialize(string text)  
  290.         {  
  291.             return text  
  292.             .Replace("{", _LEFTBRACES)  
  293.             .Replace("}", _RIGHTBRACES)  
  294.             .Replace("[", _LEFTBRACKETS)  
  295.             .Replace("]", _RIGHTBRACKETS)  
  296.             .Replace("/"", _DOUBLEQUOTATIONMARKS);  
  297.         }  
  298.   
  299.         /// <summary>   
  300.         /// 字符串转义,将_LEFTBRACES、_RIGHTBRACES、_DOUBLEQUOTATIONMARKS,分别转换"{"、"}"、"""   
  301.         /// </summary>   
  302.         /// <param name="text"></param>   
  303.         /// <returns></returns>   
  304.         public static string StrDecodeForDeserialize(string text)  
  305.         {  
  306.             return text.Replace(_LEFTBRACES, "{")  
  307.             .Replace(_RIGHTBRACES, "}")  
  308.             .Replace(_LEFTBRACKETS, "[")  
  309.             .Replace(_RIGHTBRACKETS, "]")  
  310.             .Replace(_DOUBLEQUOTATIONMARKS, "/"");  
  311.         }  
  312.         #endregion  
  313.     }  
  314. }  
C#.NET操作JSON很有用的类库 .NET操作JSON很有用的类库 使用超级方便 立即下载

相关推荐

基于C#实现的对Json进行格式化字符串解析的.NET类库源码V3.0

基于C#实现的对Json进行格式化字符串解析的.NET类库源码V3.0.

C# 解析Json文件(使用NewtonJson库)

C#中解析json文件有很多种方法,在多种方法中一般都会提到一个十分优秀的库:NewtonJson。使用NewtonJson处理Json文件十分高效,而且在配置也十分简单,直接在Nuget包中导入即可。 目录 1.导入NewtonJson库 2.解析Json文件 2.1 最简单的序列化与反序列化 2.2 序列化集合和字典 2.3 反序列化集合和字典 2.4 将对象保存为Json文件...

q__y__L的博客 2万+

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2764

c#如何判断一个类型是否为数值类型

需要实现一个读取json配置文件的功能,原方法为 public T ReadConfig<T>(string name,T defaultValue){ var vaue=JObject[name].ToString();//JObject是Newtonsoft.Json.Linq.JObject.Parse()获取的 if(string.IsNullOrWhiteSpace(value)){ re...

jiawuxian的专栏 4843

麒麟系统grub被锁怎么办?双密码遗忘救援指南(实测V10 SP3版本)

本文详细介绍了麒麟系统V10 SP3版本在GRUB和root密码双遗忘情况下的救援指南。通过ISO镜像进入救援模式,结合单用户模式操作,实现密码重置与系统权限恢复,特别适用于等保合规环境。

384

数字后端流程--place

Floorplan完成后芯片的大致框架已经出现,万里长征已经迈出特别重要的第一步了,前面的步骤我们已经完成了io port,macro的摆放,现在core外只剩下std cell(标准单元)了,Place这一步就是要把std cell放进core里。看到密密麻麻的std cell也不用紧张,因为放std cell不用像macro手动一个一个摆,工具就可以帮我们完成大部分工作。虽然这一步的工作只有一个,但也不是只要Place完就能进行下一步的,衡量Place质量是否满足标准会通过以下几点判断。

qq_68400574的博客 771

一个.NET通用JSON解析/构建类的实…

一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。 假设JSON对象内容如下: 隐藏行号 复制代码 ? JSON

专注大规模数据处理 1166

避开这些坑!baostock获取股票数据时最容易犯的5个错误(Python实战)

本文针对使用Python和baostock库获取股票历史数据时常见的五大陷阱,提供了实战解决方案。重点剖析了登录状态验证、参数配置、数据解析、批量操作效率及数据一致性校验等关键环节,帮助开发者构建稳健高效的数据获取流程,避免因细节疏忽导致的数据错误或性能瓶颈。

websocket5live的博客 1439

C#解析JSON

全称“JavaScript Object Notation(JavaScript对象表示法)”,JSON 是存储和交换文本信息的语法。[ {"id" : 2 , "name" : "星河爆破" , "number" : 999 } , {"id" : 3 , "name" : "九星连珠" , "number" : 9 } , {"id" : 4 , "name" : "一语成谶" , "number" : 999 } ]学习JSON基础教程在线JSON解析及格式化验证网站。

weixin_43046974的博客 1万+

傅里叶变换实战:用Python手把手教你分析音频频谱(附完整代码)

本文详细介绍了如何使用Python实现傅里叶变换进行音频频谱分析,涵盖音频加载、预处理、FFT应用、频谱可视化及特征提取等关键步骤。通过实战案例和完整代码,帮助开发者掌握数字信号处理技术,特别适合音频分析和音乐信息检索领域的应用。

weixin_29090677的博客 150

Altium Concord Pro 的应用范围,安装,和使用范围

Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁

hanzhaos的博客 1118

json教程之C#开发json解析类

json开始流行了,性能比xml快,所以好多js类库(如jquery)都支持json格式了,通过ASP.NET与js的结合操作json数据传递应该很爽,所以本文使用C#开发一个json类,在看文章前推荐你一些文章:实用C#中任意类型数据转成JSON格式数据输出http://www.aspxcs.net/HTML/1000041074.html以实例讲解json格式应用的json详细教程http:/

狂野之城 3916

SAP S4 HANA 新资产会计中的平行分类账估值

在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。

yanzibing99的博客 1326

C#解析json字符串为对应类

【代码】C#解析字符串为对应类。

Major_S的博客 479

在Keil uv5里面添加STC元器件库,不影响其他元件

先到网上下载stc.CBD(宏晶网站的地址实效了)还有STC新系列单片机的头文件,宏晶的网站就有1、在Keil/C51/INC下新建目录"STC"文件夹, 把所有STC新系列单片机的头文件拷贝到"STC"目录下。2、下载的用于keil下的STC器件数据库更名为STC.CDB并拷贝到Keil/UV4目录下。3、打开Keil文件夹下的TOOLS.ini文件。4、在[UV2]下键入CDB0="UV2\S

技术联盟 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LitJson 将json 解析为C#类

Json 文件 [ { "ID" : 10001, "Type" : 8, "QuickMark" : 1, "MarkClass" : "HousePropertyData", "ShowConditional" : 1, "Conditionals" : ["前往指定房屋位置"], "ShowSchedule" : 0, "Schedule" : "", ...

Young的博客 776

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[C#][JSON]c#-.net通过json解析构建类

在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。c["name"] = new JsonProperty("C# 网络核心编程");c["name"] = new JsonProperty("C#入门经典中文版");book["name"] = new JsonProperty("C#入门经典中文版");//如果属性为对象类型,可通过字符串索引简化。//通过字符串构建Json对象。

一名不太专业的程序员 4262

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ZT: C#不建类直接Json解析与取值

C#不建类直接Json解析与取值 2017年10月19日 15:58:22圆圆娃哈哈阅读数:701 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/lily233/article/details/78285908 1、添加引用Newtonsoft.Json.dll(附件:http...

weixin_30699955的博客 116

JSON解析类(C#)

<br />使用本文中的JSONConvert类可将任意JSON字符串转化为JSONObject或JSONArray对象,并获取需要的值,克服了.NET自带JSON类反序列化时需知道并引用序列化时使用的类的缺点。当然,也可以使用JSONConvert类进行序列化,构造出JSON字符串。<br /> <br />JSON解析类<br />using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using

wjbaiverson的专栏 1744

C# Json解析类,可用

public class AnalyzeJson { public string error = null; string val = ""; StringBuilder key = new StringBuilder(); StringBuilder value = new StringBuilder(); ...

意琦行的博客 319
上一篇: 《SQL语法大全》
下一篇: 输入汉字获得拼音(C#)
make1828
博客等级 码龄19年 60粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值