C# Net 通用json转Object(对象)
C# Net 通用 json 转 Object 对象
C# Net 提取 json 字符串 对象 数组
C# Net json 对象 中有字符串 转为 对象
例如输入:{"1":1,"a":"aa","aa":"{\"2\":2,\"bb\":\"{\\\"3\\\":3,\\\"cc\\\":\\\"ccc\\\"}\"}"}
例如输出:{"1":1,"a":"aa","aa":{"2":2,"bb":{"3":3,"cc":"ccc"}}}
-----------------------------------------------------------------------------------
----------------如需看实现的效果,请翻到文章最后-------------------
-----------------------------------------------------------------------------------
引用包【Json.NET】 加入 名称空间
using System;
using Newtonsoft.Json.Linq;
创建一个【JsonHelper.cs】文件:
在【JsonHelper】类替换成如下代码:
public class JsonHelper
{
#region 提取json对象
/// <summary>
/// 提取json字符串对象(尽量不用此重载)
/// 例如输入:{"1":1,"a":"aa","aa":"{\"2\":2,\"bb\":\"{\\\"3\\\":3,\\\"cc\\\":\\\"ccc\\\"}\"}"}
/// 例如输出:{"1":1,"a":"aa","aa":{"2":2,"bb":{"3":3,"cc":"ccc"}}}
/// </summary>
public static JObject ExtractObj(string jsonObject)
{
return ExtractObj(JObject.Parse(jsonObject));
} /// <summary>
/// 提取json对象
/// 例如输入:{"1":1,"a":"aa","aa":"{\"2\":2,\"bb\":\"{\\\"3\\\":3,\\\"cc\\\":\\\"ccc\\\"}\"}"}
/// 例如输出:{"1":1,"a":"aa","aa":{"2":2,"bb":{"3":3,"cc":"ccc"}}}
/// </summary>
public static JObject ExtractObj(JObject job)
{
//方法一:慢(3700个字符耗时2.2-2.4秒)
//foreach (var item in job)
//{
// try
// {
// string itemStr = item.Value.ToString();
// JObject itemJObj = JObject.Parse(itemStr);
// JObject robj = ExtractObj(itemJObj);
// job[item.Key] = robj;
// }
// catch
// {
// try
// {
// string itemStr = item.Value.ToString();
// JArray itemJArr = JArray.Parse(itemStr);
// JArray rArr = ExtractArr(itemJArr);
// job[item.Key] = rArr;
// }
// catch
// {
// }
// }
//}
//return job; //方法二:快(3700个字符耗时40-60毫秒)
foreach (var item in job)
{
var itemV = item.Value;
if (itemV.Type == JTokenType.String)
{
var jtStr = itemV.ToString();
if (!IsJson(jtStr))
continue; JToken jToken = JToken.Parse(jtStr);
if (jToken.Type == JTokenType.Object)
{
job[item.Key] = ExtractObj((JObject)jToken);
}
else if (jToken.Type == JTokenType.Array)
{
job[item.Key] = ExtractArr((JArray)jToken);
}
}
else if (itemV.Type == JTokenType.Object)
{
job[item.Key] = ExtractObj((JObject)itemV);
}
else if (itemV.Type == JTokenType.Array)
{
job[item.Key] = ExtractArr((JArray)itemV);
}
}
return job;
}
#endregion #region 提取json数组
/// <summary>
/// 提取json字符串数组(尽量不用此重载)
/// 例如输入:["5","6","[\"3\",\"4\",\"[\\\"1\\\",\\\"2\\\"]\"]"]
/// 例如输出:["5","6",["3","4",["1","2"]]]
/// </summary>
public static JArray ExtractArr(string jsonArr)
{
return ExtractArr(JArray.Parse(jsonArr));
}
/// <summary>
/// 提取json数组
/// 例如输入:["5","6","[\"3\",\"4\",\"[\\\"1\\\",\\\"2\\\"]\"]"]
/// 例如输出:["5","6",["3","4",["1","2"]]]
/// </summary>
/// <param name="jArr"></param>
/// <returns></returns>
public static JArray ExtractArr(JArray jArr)
{
//方法一:慢(3700个字符耗时2.2-2.4秒)
//for (int i = 0; i < jArr.Count; i++)
//{
// try
// {
// string itemStr = jArr[i].ToString();
// JArray itemJArr = JArray.Parse(itemStr);
// JArray rArr = ExtractArr(itemJArr);
// jArr[i] = rArr;
// }
// catch
// {
// try
// {
// string itemStr = jArr[i].ToString();
// JObject itemJObj = JObject.Parse(itemStr);
// JObject robj = ExtractObj(itemJObj);
// jArr[i] = robj;
// }
// catch
// {
// }
// }
//}
//return jArr; //方法二:快(3700个字符耗时40-60毫秒)
for (int i = 0; i < jArr.Count; i++)
{
JToken jToken = jArr[i];
if (jToken.Type == JTokenType.String)
{
var jtStr = jToken.ToString();
if (!IsJson(jtStr))
continue; JToken jToken2 = JToken.Parse(jtStr);
if (jToken2.Type == JTokenType.Array)
{
jArr[i] = ExtractArr((JArray)jToken2);
}
else if (jToken2.Type == JTokenType.Object)
{
jArr[i] = ExtractObj((JObject)jToken2);
}
}
else if (jToken.Type == JTokenType.Array)
{
jArr[i] = ExtractArr((JArray)jToken);
}
else if (jToken.Type == JTokenType.Object)
{
jArr[i] = ExtractObj((JObject)jToken);
}
}
return jArr;
}
#endregion #region 提取json对象或数组
/// <summary>
/// 提取json字符串(支持对象或数组)(尽量不用此重载)
/// 例如输入:["5","6","[\"3\",\"4\",\"[\\\"1\\\",\\\"2\\\"]\"]","{\"1\":2,\"a\":\"ab\"}"]
/// 例如输出:["5","6",["3","4",["1","2"]],{"1":2,"a":"ab"}]
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static JToken ExtractAll(string json)
{
try
{
return ExtractAll(JToken.Parse(json));
}
catch
{
throw new Exception("不是有效的JToken对象");
}
} /// <summary>
/// 提取json字符串(支持对象或数组)
/// 例如输入:["5","6","[\"3\",\"4\",\"[\\\"1\\\",\\\"2\\\"]\"]","{\"1\":2,\"a\":\"ab\"}"]
/// 例如输出:["5","6",["3","4",["1","2"]],{"1":2,"a":"ab"}]
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static JToken ExtractAll(JToken jToken)
{
if (jToken.Type == JTokenType.String)
{
jToken = JToken.Parse(jToken.ToString());
} if (jToken.Type == JTokenType.Object)
{
return ExtractObj((JObject)jToken);
}
else if (jToken.Type == JTokenType.Array)
{
return ExtractArr((JArray)jToken);
}
else
{
throw new Exception("暂不支持提取[" + jToken.Type.ToString() + "]类型");
}
} #endregion #region 验证
/// <summary>
/// 是否为json(开头是{或[)
/// </summary>
public static bool IsJson(string json)
{
json = json.Trim();
if (string.IsNullOrEmpty(json))
return false; var t = json.First();
if (t == '{' || t == '[')
return true; return false;
}
#endregion
}
创建控制台【测试项目】:
加入包【Json.NET】,并加入如下名称空间:
using Newtonsoft.Json;
using System.Collections.Generic;
在控制台中调用:
static void Main(string[] args)
{
Dictionary<string, object> keys = new Dictionary<string, object>
{
{ "1",2 },
{ "a", "ab" },
//{ "ab", JsonConvert.SerializeObject(vs3) },
}; List<string> vs = new List<string>() { "1", "2" };
List<string> vs2 = new List<string>() { "3", "4", JsonConvert.SerializeObject(vs) };
List<string> vs3 = new List<string>() { "5", "6", JsonConvert.SerializeObject(vs2), JsonConvert.SerializeObject(keys) }; var ss = JsonHelper.ExtractArr(JsonConvert.SerializeObject(vs3));
//var ss = JsonHelper.ExtractObj(JsonConvert.SerializeObject(keys));
string sss = ss.ToString();
}
在【www.json.cn】下的可视化结果:
原json:
处理过后的json:
完成!
C# Net 通用json转Object(对象)的更多相关文章
- jquery ajax获取json并解析,获取的json是object对象格式
首先我们使用的是ajax方式,推荐一个学习网址: http://blog.csdn.net/shiyaru1314/article/details/51065410 这个博主写的特别好.现在来看我们的 ...
- JSON(JavaScript Object Notation, JS 对象标记)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...
- Jackson实现Object对象与Json字符串的互转
在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的.然而通过Json实现数据交互成为我们开发中的一部分,进而Jackson为我们的Json转化提供了很好的机制.下面我将利用实例总结如何使用 ...
- atitit.XML类库选型及object 对象bean 跟json转换方案
atitit.XML类库选型及object 对象bean 跟json转换方案 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的 1 2. 常见的xml方面的方法 2 2.1. ...
- C#-使用Newtonsoft.Json实现json字符串与object对象互转
json字符串转object对象: IF004Response processResponse = JsonConvert.DeserializeObject<IF004Response> ...
- Android 利用 gson 将 json 转成 对象object 集合list
1.build.gradle 中引入gson compile 'com.google.code.gson:gson:2.8.5' 2.将后台返回的json数据转对象.List.时间格式与后台返回的时间 ...
- [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类
[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...
- 一个.NET通用JSON解析/构建类的实现(c#)转
转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...
- Elasticsearch-PHP 处理JSON数组和对象
PHP中处理JSON数组和对象 客户端有一些混淆的资源是围绕着JSON的数组和对象,以及如何在PHP中指定它们.特别是,问题是由空对象和空数组导致的.这篇文章回告诉你一些在Elasticsearch ...
随机推荐
- JDOJ 1139 水仙花数
JDOJ 1139: 水仙花数 https://neooj.com/oldoj/problem.php?id=1139 Description 打印出所有"水仙花数",所谓&quo ...
- JDOJ 1927 求逆序对
洛谷 P1908 逆序对 洛谷传送门 JDOJ 1927: 求逆序对 JDOJ传送门 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现 ...
- leetcode14最长公共前缀
class Solution { public: string longestCommonPrefix(vector<string>& strs) { ) return " ...
- Mysql对表中 数据 的操作 DML
上一知识点回顾: mysql的备份: 直接使用navicat进行备份 转储SQL文件:有结构和数据/ 仅结构 两种 需要还原时 单击 数据库名字 运行SQL文件 创建表ctreate 修改表alt ...
- SQL中group by的注意事项
最最最最重要的: group by有一个原则,就是select后面所有的列中,没有使用聚合函数的列,必须出现在group by子句中. group by子句中的注意事项: 1,不能使用别名(因为执行顺 ...
- [PHP] 关闭nginx访问favico.ico功能
关闭nginx访问favico.ico功能 nginx日志最近发生大量访问favicon.ico无法找到的错误日志,很影响服务器性能,对于一个高并发的服务器每一个错误都会影响性能 关闭访问favico ...
- 【转】TCP/IP协议——ARP详解
本文主要讲述了ARP的作用.ARP分组格式.ARP高速缓存.免费ARP和代理ARP. 1.学习ARP前要了解的内容 建立TCP连接与ARP的关系 应用接受用户提交的数据,触发TCP建立连接,TCP的第 ...
- mac生成iOS证书(配图)
当我们完成一个APP的时候,需要发布到各大平台让用户下载.而iOS用户是一个不可忽视的群体. 想要在 App Store发布APP,总结了下需要三个步骤. 第一步生成APPID. 第二步生成证书 ce ...
- python3中用django下载文件,中文名乱码怎么办?
前段时间被某个前端小可爱鄙视了一下,说我博客都一年不更新了,我不服,明明还有俩月才到一年呢.不过说是这么说,还是要更新一下的. 以上都是借口,下面开始正文. 我公司的某个内部系统,用djang ...
- eclipse 设置所有文件编码为UTF-8(最全)
如何修改eclipse工作空间的字符集以及项目的字符集? 第一种方式:修改eclipse的配置文件 打开{ECLIPSE_HOME}/eclipse.ini文件 在最后一行加上属性: -Dfile ...