json教程之C#开发json解析类

全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 全网最简单的C# json数据解析无敌菜鸟教程十分钟搞定json数据解析废话先说一点,算了。直接进入正题吧。 用例子说话:JSON数据:string json: " { "Result": "A01", "List": [ { "name": "王艳", "sex": "F", "idno": 阅读详情

json开始流行了,性能比xml快,所以好多js类库(如jquery)都支持json格式了,通过ASP.NET与js的结合操作json数据传递应该很爽,所以本文使用C#开发一个json类,在看文章前推荐你一些文章:

实用C#中任意类型数据转成JSON格式数据输出
http://www.xueit.com/html/2009-12-15/21-1506045328843.html
以实例讲解json格式应用的json详细教程
http://www.xueit.com/html/2009-08/33_4398_00.html

好了,说看看这个json类的事情,使用本文中的JSONConvert类可将任意JSON字符串转化为JSONObject或JSONArray对象,并获取需要的值,克服了.NET自带JSON类反序列化时需知道并引用序列化时使用的类的缺点。当然,也可以使用JSONConvert类进行序列化,构造出JSON字符串。

下面是类的源码,可以复制直接使用哦。

 json类 Code [http://www.xueit.com]
//using System.Collections.Generic;
//using System.Text;
//using System.Text.RegularExpressions;

/// <summary>
/// 类  名:JSONConvert
/// 描  述:JSON解析类
/// 编  写:dnawo
/// 站  点:http://www.mzwu.com/
/// 日  期:2010-01-06
/// 版  本:1.1.0
/// </summary>
public static class JSONConvert
{
    #region 全局变量

    private static JSONObject _json = new JSONObject();//寄存器
    private static readonly string _SEMICOLON = "@semicolon";//分号转义符
    private static readonly string _COMMA = "@comma"; //逗号转义符

    #endregion

    #region 字符串转义
    /// <summary>
    /// 字符串转义,将双引号内的:和,分别转成_SEMICOLON和_COMMA
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    private static string StrEncode(string text)
    {
        MatchCollection matches = Regex.Matches(text, "///"[^///"] ///"");
        foreach (Match match in matches)
        {
            text = text.Replace(match.Value, match.Value.Replace(":", _SEMICOLON).Replace(",", _COMMA));
        }

        return text;
    }

    /// <summary>
    /// 字符串转义,将_SEMICOLON和_COMMA分别转成:和,
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    private static string StrDecode(string text)
    {
        return text.Replace(_SEMICOLON, ":").Replace(_COMMA, ",");
    }

    #endregion

    #region JSON最小单元解析

    /// <summary>
    /// 最小对象转为JSONObject
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    private static JSONObject DeserializeSingletonObject(string text)
    {
        JSONObject jsonObject = new JSONObject();

        MatchCollection matches = Regex.Matches(text, "(///"(?<key>[^///"] )///":///"(?<value>[^,///"] )///")|(///"(?<key>[^///"] )///":(?<value>[^,///"//}] ))");
        foreach (Match match in matches)
        {
            string value = match.Groups["value"].Value;
            jsonObject.Add(match.Groups["key"].Value, _json.ContainsKey(value) ? _json[value] : StrDecode(value));
        }

        return jsonObject;
    }

    /// <summary>
    /// 最小数组转为JSONArray
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    private static JSONArray DeserializeSingletonArray(string text)
    {
        JSONArray jsonArray = new JSONArray();

        MatchCollection matches = Regex.Matches(text, "(///"(?<value>[^,///"] )/")|(?<value>[^,//[//]] )");
        foreach (Match match in matches)
        {
            string value = match.Groups["value"].Value;
            jsonArray.Add(_json.ContainsKey(value) ? _json[value] : StrDecode(value));
        }

        return jsonArray;
    }

    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    private static string Deserialize(string text)
    {
        text = StrEncode(text);//转义;和,

        int count = 0;
        string key = string.Empty;
        string pattern = "(//{[^//[//]//{//}] //})|(//[[^//[//]//{//}] //])";

        while (Regex.IsMatch(text, pattern))
        {
            MatchCollection matches = Regex.Matches(text, pattern);
            foreach (Match match in matches)
            {
                key = "___key"   count   "___";

                if (match.Value.Substring(0, 1) == "{")
                    _json.Add(key, DeserializeSingletonObject(match.Value));
                else
                    _json.Add(key, DeserializeSingletonArray(match.Value));

                text = text.Replace(match.Value, key);

                count  ;
            }
        }
        return text;
    }

    #endregion

    #region 公共接口

    /// <summary>
    /// 序列化JSONObject对象
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public static JSONObject DeserializeObject(string text)
    {
        return _json[Deserialize(text)] as JSONObject;
    }

    /// <summary>
    /// 序列化JSONArray对象
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    public static JSONArray DeserializeArray(string text)
    {
        return _json[Deserialize(text)] as JSONArray;
    }
   
    /// <summary>
    /// 反序列化JSONObject对象
    /// </summary>
    /// <param name="jsonObject"></param>
    /// <returns></returns>
    public static string SerializeObject(JSONObject jsonObject)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("{");
        foreach (KeyValuePair<string, object> kvp in jsonObject)
        {
            if (kvp.Value is JSONObject)
            {
                sb.Append(string.Format("/"{0}/":{1},", kvp.Key, SerializeObject((JSONObject)kvp.Value)));
            }
            else if (kvp.Value is JSONArray)
            {
                sb.Append(string.Format("/"{0}/":{1},", kvp.Key, SerializeArray((JSONArray)kvp.Value)));
            }
            else if (kvp.Value is String)
            {
                sb.Append(string.Format("/"{0}/":/"{1}/",", kvp.Key, kvp.Value));
            }
            else
            {
                sb.Append(string.Format("/"{0}/":/"{1}/",", kvp.Key, ""));
            }
        }
        if (sb.Length > 1)
            sb.Remove(sb.Length - 1, 1);
        sb.Append("}");
        return sb.ToString();
    }
   
    /// <summary>
    /// 反序列化JSONArray对象
    /// </summary>
    /// <param name="jsonArray"></param>
    /// <returns></returns>
    public static string SerializeArray(JSONArray jsonArray)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("[");
        for (int i = 0; i < jsonArray.Count; i  )
        {
            if (jsonArray[i] is JSONObject)
            {
                sb.Append(string.Format("{0},", SerializeObject((JSONObject)jsonArray[i])));
            }
            else if (jsonArray[i] is JSONArray)
            {
                sb.Append(string.Format("{0},", SerializeArray((JSONArray)jsonArray[i])));
            }
            else if (jsonArray[i] is String)
            {
                sb.Append(string.Format("/"{0}/",", jsonArray[i]));
            }
            else
            {
                sb.Append(string.Format("/"{0}/",", ""));
            }

        }
        if (sb.Length > 1)
            sb.Remove(sb.Length - 1, 1);
        sb.Append("]");
        return sb.ToString();
    }
    #endregion
}

/// <summary>
/// 类  名:JSONObject
/// 描  述:JSON对象类
/// 版  本:1.1.0
/// 更新历史:
///     2010-01-06  继承Dictionary<TKey, TValue>代替this[]
/// </summary>
public class JSONObject : Dictionary<string, object>
{}

/// <summary>
/// 类  名:JSONArray
/// 描  述:JSON数组类
/// 版  本:1.1.0
/// 更新历史:
///     2010-01-06  继承List<T>代替this[]
/// </summary>
public class JSONArray : List<object>
{}
嗯,json写完了,下面来看下使用的方法:

 Code [http://www.xueit.com]
//序列化
JSONArray jsonArray = new JSONArray();
jsonArray.Add("2006");
jsonArray.Add("2007");
jsonArray.Add("2008");
jsonArray.Add("2009");
jsonArray.Add("2010");

JSONObject jsonObject = new JSONObject();
jsonObject.Add("domain", "mzwu.com");
jsonObject.Add("years", jsonArray);

Console.WriteLine(JSONConvert.SerializeObject(jsonObject));

//反序列化  "{/"domain/":/"mzwu.com/",/"years/":[2006,2007,2008,2009,2010]}"
JSONObject json = JSONConvert.DeserializeObject(JSONConvert.SerializeObject(jsonObject));
if (json != null)
{
    Console.WriteLine(json["domain"]);
    Console.WriteLine(((JSONArray)json["years"])[3]);
}

C#解析JSON string jsonText = "{\"name\":\"网站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻译\"]},{\"name\":\"Taobao\",\"info\":[\"淘宝\",\"网购\"]}]}";string jsonText = "{\"allname\":{\"name\":\"张三\",\"name_en\":\"zhangsan\"}}"; 阅读详情

相关推荐

C# 中使用 JSON:从解析到生成的完整指南

你可以使用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3538

JsonObject

引用using Xfrog.Net; 用法如: JsonObject newObj = new JsonObject("json字符串"); String errorCode = newObj["error_code"].Value;//获取其中的属性值。

C#java一样优雅的解析JSON数据

C#的一个解析JSON的工具,像java一样优雅的解析JSON数据,包含有JSONObjectJSONArray对象。 JSONObject json = new JSONObject(); json.Put("sex", "男"); json.Put("age", 123); json.Put("name", "张三"); JSONArray array = new JSONArray(); array.Put(json); Console.WriteLine(array.GetJSONObject(0).GetString("name")); JSONObject json = new JSONObject("{'sex':'男','name':'张三','data':[{'book':'一本书'},{'book':'二本书'}]}"); Console.WriteLine(json.Get("sex")); Console.WriteLine(json.Get("name")); JSONArray datas = json.GetJSONArray("data"); Console.WriteLine(datas.GetJSONObject(0).GetString("book"));

C# Json转对象(object

格式转换 jsonobject

weixin_44226526的博客 9746

[C#]JSONObject解析jsonC# asp.net JSON解析

前言:公司最近遇到问题,以往C#的接口通讯都是走xml的形式,因为现在的主流接口都采用json数据格式,但c#中并没有提供特别的方法帮助开发者,解析和生成都非常麻烦,我做为一个移动端开发者,于是想到了将java解析方法移植到c#中去,漫长的移植工作开始了,经过一段时间的努力,再加上原本就有一些C#基础的我来说,改起来还是很轻松的,在java中的很多api在c#中都没有,于是乎,找类似方法进行替代

天下武功唯CODING不破 3万+

全面掌握C#的JObjectC#开发JSON数据解析与操作实战指南

全面掌握C#的JObjectC#开发JSON数据解析与操作实战指南

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1万+

JSON资料汇总

网络入门学习资料 1.W3School的JSON教程:http://www.w3school.com.cn/json/index.asp 2.Introducing JSON【介绍JSON】:http://www.json.org/【中文:http://www.json.org/json-zh.html】 其他参考资料: 1.C#解析json文件的方法...

weixin_34198881的博客 94

也谈C#Json,从Json字符串到代码

原文:也谈C#Json,从Json字符串到代码 阅读目录 json对象 逆思考 从json字符串自动生成C#    json对象   自从.net 4.0开始,微软提供了一整套的针对json进行处理的方案。其中,就有如何把json字符串转化成C#对象,其实这段代码很多人都清楚,大家也都认识,我就不多说,先贴代码。 1、添加引用...

weixin_34159110的博客 110

Unity之Json解析Litjson和自带JsonUtility解析区别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/hemiaoyuan1989/article/details/92635721 首先先写几个测试: public class Person { public string name; public string address; publ...

qq_39908137的博客 1505

Unity-Json数据解析

一、Json序列化(写入Json) 命名空间引入 using UnityEngine; using LitJson; using System.IO; using System.Text.RegularExpressions; using System; using System.Collections.Generic; 定义一个JsonInfo,在对此进行赋值之后进行json序列化操作 ...

weixin_38484443的博客 4356

C# Json格式转换成List集合

public List<User> JsonToList(string str) { str = "{\"User\":[{\"Name\":\"Sony\",\"Age\":7},{\"Name\":\"Samsumg\",\"Age\":14},{\"Name\":\"LG\",\"Age\":21},{\"Name\":\"Vizio\",\...

weixin_30851867的博客 3449

C# JSON格式的字符串读取到

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34413103的博客 290
上一篇: JSON入门教程
下一篇: ASPAJAXExtSetup.msi及AJAX Control TollKit安装包下载地址及安装方法
mounting
博客等级 码龄18年 4粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值