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. nodejs接收post请求参数

    原文 https://blog.csdn.net/u013263917/article/details/78682270#1.2 nodejs接收post请求参数1.1-浏览器发送post请求参数的方 ...

  2. pointnet++之classification/train.py

    1.数据集加载 if FLAGS.normal: assert(NUM_POINT<=10000) DATA_PATH = os.path.join(ROOT_DIR, 'data/modeln ...

  3. Linux上zookeeper+dubbo-admin的安装及使用

    空linux安装,需要先安装JDK,mysql,tomcat等 一. dubbo-admin依赖外置tomcat. tomcat依赖JDK. 首先要安装JDK,tomcat,顺便安装mysql 安装J ...

  4. Codeforces Global Round 2 D 差分 + 前缀和 + 二分

    https://codeforces.com/contest/1119/problem/D 题意 有n个数组,每个数组大小为\(10^{18}+1\)且为等差数列,给出n个数组的\(s[i]\),q次 ...

  5. 忍者钩爪 ( ninja) 题解———2019.10.19

    可以到这里测..嘿嘿嘿 题目: [问题 描述 ] 小 Q 是一名酷爱钩爪的忍者, 最喜欢飞檐走壁的感觉, 有一天小 Q 发现一个练习使用钩 爪的好地方,决定在这里大显身手. 场景的天花板可以被描述为一 ...

  6. 【转】hibernate对象三种状态

    hibernate里对象有三种状态: 1,Transient 瞬时 :对象刚new出来,还没设id,设了其他值. 2,Persistent 持久:调用了save().saveOrUpdate(),就变 ...

  7. 爬虫,爬取景点信息采用pandas整理数据

    一.首先需要导入我们的库函数 导语:通过看网上直播学习得到,如有雷同纯属巧合. import requests#请求网页链接import pandas as pd#建立数据模型from bs4 imp ...

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

    一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.g ...

  9. [灯火阑珊] 关于cmd命令里的findstr匹配多个关键词

    no raining now go to school and play with code 你. findstr "\<go  code\>" 这样就能匹配输出包含g ...

  10. java通过maven打包解决xml读取格式失败问题

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compi ...