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(对象)的更多相关文章

  1. jquery ajax获取json并解析,获取的json是object对象格式

    首先我们使用的是ajax方式,推荐一个学习网址: http://blog.csdn.net/shiyaru1314/article/details/51065410 这个博主写的特别好.现在来看我们的 ...

  2. JSON(JavaScript Object Notation, JS 对象标记)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  3. Jackson实现Object对象与Json字符串的互转

    在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的.然而通过Json实现数据交互成为我们开发中的一部分,进而Jackson为我们的Json转化提供了很好的机制.下面我将利用实例总结如何使用 ...

  4. atitit.XML类库选型及object 对象bean 跟json转换方案

    atitit.XML类库选型及object 对象bean 跟json转换方案 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的 1 2. 常见的xml方面的方法 2 2.1.  ...

  5. C#-使用Newtonsoft.Json实现json字符串与object对象互转

    json字符串转object对象: IF004Response processResponse = JsonConvert.DeserializeObject<IF004Response> ...

  6. Android 利用 gson 将 json 转成 对象object 集合list

    1.build.gradle 中引入gson compile 'com.google.code.gson:gson:2.8.5' 2.将后台返回的json数据转对象.List.时间格式与后台返回的时间 ...

  7. [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类

    [.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) Json 序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能 ...

  8. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  9. Elasticsearch-PHP 处理JSON数组和对象

    PHP中处理JSON数组和对象 客户端有一些混淆的资源是围绕着JSON的数组和对象,以及如何在PHP中指定它们.特别是,问题是由空对象和空数组导致的.这篇文章回告诉你一些在Elasticsearch ...

随机推荐

  1. Mybatis-Plus Bugs

    Mybatis-Plus Bugs 实体类中属性和数据库字段对应异常 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'user ...

  2. 深度学习accuracy

    accuracy=(1+3)/(1+2+3+4),即在所有样本(例子)中做出正确预测的的比例,或者说正确预测的样本数占总预测样本数的比值. precision=(1)/(1+2),指的是正确预测的正样 ...

  3. flink源码学习

    传送门: https://www.jianshu.com/c/c9b356caf8a6

  4. bcc 基于bpf 分析linux 系统性能的强大工具包

    bcc 是一个基于bpf 的强大linux io,网络监控分析工具集(当然也可以分析java,ruby,python...) 一张工具图 说明 bcc 好多工具是需要kernel 4.1 的,但是大部 ...

  5. 【Comet OJ - Contest #0 A】解方程(数学水题)

    点此看题面 大致题意: 给定自然数\(n\),让你求出方程\(\sqrt{x-\sqrt n}+\sqrt y-\sqrt z=0\)的自然数解\(x,y,z\)的数量以及所有解\(xyz\)之和. ...

  6. 【redis】分布式锁实现,与分布式定时任务

    如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...

  7. nodejs的child_process

    child_process  模块提供了衍生子进程的能力 异步方式:spawn.exec.execFile.fork 同步方式:spawnSync.execSync.execFileSync 说明: ...

  8. Nginx开启gzip提高页面加载速度

    今天发现页面多次请求数据且加载的数据大,需要等待的时间很长 记得Nginx有gzip,可以对数据进行压缩 gzip是nginx服务器的ngx_http_gzip_module模块提供的在线实时数据压缩 ...

  9. 【已解决】C#导入音频文件

    C#导入音频文件,找到Resources.resx,再进行导入. 直接添加文件到Resources是不能使用的. 解决的具体步骤: 引用音频文件核心代码: //播放背景音乐 SoundPlayer m ...

  10. C# Thread was being aborted

    先重现问题 1.新建一个aspx页面项目,插入两个页面WebForm1.aspx,WebForm2.aspx, WebForm1代码修改如下 protected void Page_Load(obje ...