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. python27期day01:变量、常量、注释、PEP8开发规范、数据类型、Python2和Python3的区别、用户输入、流程控制语句、作业题

    1.变量:将程序中运行的中间值临时存储起来,以便下次使用. 2.变量命名规范:数字.字母.下划线.建议驼峰体.变量名具有可描述性.不能使用中文和拼音.不能数字开头和使用关键字('and', 'as', ...

  2. Associatively Segmenting Instances and Semantics in Point Clouds

    论文引入一个简单且灵活的框架同时分割点云中的实例和语义,进一步提出两种方法让两个任务从彼此受益. 代码: https://github.com/WXinlong/ASIS 论文: https://ar ...

  3. c:forTokens标签循环输出

    对带有相同符合格式内容进行分割输出,例如,varstr="1,2,3,4,5,6"; c:forTokens属性说明表 引用 varStatus,它们描述了迭代的当前状态,如下这些 ...

  4. 了解html表单

    html表单 表单的根标签:form form标签属性 action:处理表单业务的后台代码的位置(URL) method:提交方式 post get  默认值 enctype:encode type ...

  5. [1018NOIP模拟赛]

    题目描述 Description 精灵王国要同侵略 $ Bzeroth $ 大陆的地灾军团作战了. 众所周知,精灵王国有 \(N\) 座美丽的城市,它们以一个环形排列在$ Bzeroth$ 的大陆上. ...

  6. dl-google.com 的问题

    印象里,如果用过公司vpn之后,再用android studio, 这个地址就能被解析下载了. 看来,应该只是域名被屏蔽,ip并没有. 所以,以后拿到ip之后,写进hosts里应该没事 https:/ ...

  7. ESP8266 LUA脚本语言开发: 准备工作-LUA开发说明

    前言 开发Lua需要使用这个软件 注:该软件需要按照JDK  即 JAVA虚拟机,如果没有安装过JDK,请先看JDK安装教程安装JDK USB线连接开发板接入电脑 选择自己的串口号 波特率115200 ...

  8. 文本特征提取---词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram )

    假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...

  9. NLP之预训练

    内容是结合:https://zhuanlan.zhihu.com/p/49271699 可以直接看原文 预训练一般要从图像处理领域说起:可以先用某个训练集合比如训练集合A或者训练集合B对这个网络进行预 ...

  10. 图论问题(1) : hdu 1198

    题目转自hdu 1198,题目传送门 题目大意: 给你11种单位水管摆放位置,若上下或左右有水管连接则视为这两点相连. 最后让你求这些张图中有几个连通块. 解题思路: 本来觉得这道题很简单,不就一个建 ...