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. Visualforce 页面的生命周期

    了解 Visualforce 页面的生命周期可以让我们明白其各个元素的执行顺序.改变逻辑,从而提高开发效率,避免不必要的错误. 在官方文档中有详细的讲解.本文摘取其中的要点,作为一个总结. Visua ...

  2. nexus php composer host 模式repo 试用

    前边有介绍以及运行过基于nexus proxy 模式的php composer(其中也有一些坑),以下是关于host 模式的 简单使用 环境准备 docker-compose 文件   version ...

  3. F5 开发

    产品试用申请 https://www.f5.com/trials 默认终端登录密码 root/default 默认网页登录信息 admin/admin logstash添加user agent插件 h ...

  4. <BackTracking> Combination, DFS :216 DP: 377

    216. Combination Sum III 保证subset.size( ) == k && target == 0的时候结束DFS subset.size( ) > k ...

  5. struct和class内存大小的计算

    以下均是在VS2017下的结果 结构体内存大小的计算: 用例一: #include<stdio.h> union ss { int a; char b; }; struct MyStruc ...

  6. 宏任务和微任务:setTimeout和Promise执行顺序

    先以一道面试题做引子: 写出这段程序的输出内容: setTimeout(function(){ console.log(); },); new Promise(function(a,b){ conso ...

  7. MySQL使用的几条注意事项和1449错误解决方案

    一.如何在Windows终端连接MySQL? 使用cmd进入终端,然后要进入到你安装MySQL的bin目录下(如果没有的话,会出现该命令无效之类的错误),然后使用命令mysql -u root -p, ...

  8. Linux性能优化实战学习笔记:第十一讲

    一.性能指标 1.性能指标思维导图 2.CPU使用率 3.CPU平均负载 4.CPU缓存的命中率 CPU 在访问内存的时候,免不了要等待内存的响应.为了协调这两者巨大的性能差距,CPU 缓存(通常是多 ...

  9. Linux性能优化实战学习笔记:第四十四讲

    一.上节回顾 上一节,我们学了网络性能优化的几个思路,我先带你简单复习一下. 在优化网络的性能时,你可以结合 Linux 系统的网络协议栈和网络收发流程,然后从应用程序.套接字.传输层.网络层再到链路 ...

  10. greatest among three numbers

    public class Solution { public static void main(String[] args) { Scanner ip = new Scanner(System.in) ...