各种类型的Json格式化

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Reflection;

using System.Collections;

using System.Data.Common;

public class ConvertJson

{

    #region 私有方法

    /// <summary>

    /// 过滤特殊字符

    /// </summary>

    private static string String2Json(String s)

    {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < s.Length; i++)

        {

            char c = s.ToCharArray()[i];

            switch (c)

            {

                case ‘\"‘:

                    sb.Append("\\\""); break;

                case ‘\\‘:

                    sb.Append("\\\\"); break;

                case ‘/‘:

                    sb.Append("\\/"); break;

                case ‘\b‘:

                    sb.Append("\\b"); break;

                case ‘\f‘:

                    sb.Append("\\f"); break;

                case ‘\n‘:

                    sb.Append("\\n"); break;

                case ‘\r‘:

                    sb.Append("\\r"); break;

                case ‘\t‘:

                    sb.Append("\\t"); break;

                default:

                    sb.Append(c); break;

            }

        }

        return sb.ToString();

    }

    /// <summary>

    /// 格式化字符型、日期型、布尔型

    /// </summary>

    private static string StringFormat(string str, Type type)

    {

        if (type == typeof(string))

        {

            str = String2Json(str);

            str = "\"" + str + "\"";

        }

        else if (type == typeof(DateTime))

        {

            str = "\"" + str + "\"";

        }

        else if (type == typeof(bool))

        {

            str = str.ToLower();

        }

        else if (type != typeof(string) && string.IsNullOrEmpty(str))

        {

            str = "\"" + str + "\"";

        }

        return str;

    }

    #endregion

    #region List转换成Json

    /// <summary>

    /// List转换成Json

    /// </summary>

    public static string ListToJson<T>(IList<T> list)

    {

        object obj = list[0];

        return ListToJson<T>(list, obj.GetType().Name);

    }

    /// <summary>

    /// List转换成Json

    /// </summary>

    public static string ListToJson<T>(IList<T> list, string jsonName)

    {

        StringBuilder Json = new StringBuilder();

        if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name;

        Json.Append("{\"" + jsonName + "\":[");

        if (list.Count > 0)

        {

            for (int i = 0; i < list.Count; i++)

            {

                T obj = Activator.CreateInstance<T>();

                PropertyInfo[] pi = obj.GetType().GetProperties();

                Json.Append("{");

                for (int j = 0; j < pi.Length; j++)

                {

                    Type type = pi[j].GetValue(list[i], null).GetType();

                    Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));

                    if (j < pi.Length - 1)

                    {

                        Json.Append(",");

                    }

                }

                Json.Append("}");

                if (i < list.Count - 1)

                {

                    Json.Append(",");

                }

            }

        }

        Json.Append("]}");

        return Json.ToString();

    }

    #endregion

    #region 对象转换为Json

    /// <summary>

    /// 对象转换为Json

    /// </summary>

    /// <param name="jsonObject">对象</param>

    /// <returns>Json字符串</returns>

    public static string ToJson(object jsonObject)

    {

        string jsonString = "{";

        PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();

        for (int i = 0; i < propertyInfo.Length; i++)

        {

            object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);

            string value = string.Empty;

            if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)

            {

                value = "‘" + objectValue.ToString() + "‘";

            }

            else if (objectValue is string)

            {

                value = "‘" + ToJson(objectValue.ToString()) + "‘";

            }

            else if (objectValue is IEnumerable)

            {

                value = ToJson((IEnumerable)objectValue);

            }

            else

            {

                value = ToJson(objectValue.ToString());

            }

            jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";

        }

        jsonString.Remove(jsonString.Length - 1, jsonString.Length);

        return jsonString + "}";

    }

    #endregion

    #region 对象集合转换Json

    /// <summary>

    /// 对象集合转换Json

    /// </summary>

    /// <param name="array">集合对象</param>

    /// <returns>Json字符串</returns>

    public static string ToJson(IEnumerable array)

    {

        string jsonString = "[";

        foreach (object item in array)

        {

            jsonString += ToJson(item) + ",";

        }

        jsonString.Remove(jsonString.Length - 1, jsonString.Length);

        return jsonString + "]";

    }

    #endregion

    #region 普通集合转换Json

    /// <summary>

    /// 普通集合转换Json

    /// </summary>

    /// <param name="array">集合对象</param>

    /// <returns>Json字符串</returns>

    public static string ToArrayString(IEnumerable array)

    {

        string jsonString = "[";

        foreach (object item in array)

        {

            jsonString = ToJson(item.ToString()) + ",";

        }

        jsonString.Remove(jsonString.Length - 1, jsonString.Length);

        return jsonString + "]";

    }

    #endregion

    #region  DataSet转换为Json

    /// <summary>

    /// DataSet转换为Json

    /// </summary>

    /// <param name="dataSet">DataSet对象</param>

    /// <returns>Json字符串</returns>

    public static string ToJson(DataSet dataSet)

    {

        string jsonString = "{";

        foreach (DataTable table in dataSet.Tables)

        {

            jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";

        }

        jsonString = jsonString.TrimEnd(‘,‘);

        return jsonString + "}";

    }

    #endregion

    #region Datatable转换为Json

    /// <summary>

    /// Datatable转换为Json

    /// </summary>

    /// <param name="table">Datatable对象</param>

    /// <returns>Json字符串</returns>

    public static string ToJson(DataTable dt)

    {

        StringBuilder jsonString = new StringBuilder();

        jsonString.Append("[");

        DataRowCollection drc = dt.Rows;

        for (int i = 0; i < drc.Count; i++)

        {

            jsonString.Append("{");

            for (int j = 0; j < dt.Columns.Count; j++)

            {

                string strKey = dt.Columns[j].ColumnName;

                string strValue = drc[i][j].ToString();

                Type type = dt.Columns[j].DataType;

                jsonString.Append("\"" + strKey + "\":");

                strValue = StringFormat(strValue, type);

                if (j < dt.Columns.Count - 1)

                {

                    jsonString.Append(strValue + ",");

                }

                else

                {

                    jsonString.Append(strValue);

                }

            }

            jsonString.Append("},");

        }

        jsonString.Remove(jsonString.Length - 11);

        jsonString.Append("]");

        return jsonString.ToString();

    }

    /// <summary>

    /// DataTable转换为Json

    /// </summary>

    public static string ToJson(DataTable dt, string jsonName)

    {

        StringBuilder Json = new StringBuilder();

        if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName;

        Json.Append("{\"" + jsonName + "\":[");

        if (dt.Rows.Count > 0)

        {

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                Json.Append("{");

                for (int j = 0; j < dt.Columns.Count; j++)

                {

                    Type type = dt.Rows[i][j].GetType();

                    Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));

                    if (j < dt.Columns.Count - 1)

                    {

                        Json.Append(",");

                    }

                }

                Json.Append("}");

                if (i < dt.Rows.Count - 1)

                {

                    Json.Append(",");

                }

            }

        }

        Json.Append("]}");

        return Json.ToString();

    }

    #endregion

    #region DataReader转换为Json

    /// <summary>

    /// DataReader转换为Json

    /// </summary>

    /// <param name="dataReader">DataReader对象</param>

    /// <returns>Json字符串</returns>

    public static string ToJson(DbDataReader dataReader)

    {

        StringBuilder jsonString = new StringBuilder();

        jsonString.Append("[");

        while (dataReader.Read())

        {

            jsonString.Append("{");

            for (int i = 0; i < dataReader.FieldCount; i++)

            {

                Type type = dataReader.GetFieldType(i);

                string strKey = dataReader.GetName(i);

                string strValue = dataReader[i].ToString();

                jsonString.Append("\"" + strKey + "\":");

                strValue = StringFormat(strValue, type);

                if (i < dataReader.FieldCount - 1)

                {

                    jsonString.Append(strValue + ",");

                }

                else

                {

                    jsonString.Append(strValue);

                }

            }

            jsonString.Append("},");

        }

        dataReader.Close();

        jsonString.Remove(jsonString.Length - 11);

        jsonString.Append("]");

        return jsonString.ToString();

    }

    #endregion

}

时间: 2024-10-18 18:48:24

各种类型的Json格式化的相关文章

Asp.net WebAPi gzip压缩和json格式化

现在webapi越来越流行了,很多时候它都用来做接口返回json格式的数据,webapi原本是根据客户端的类型动态序列化为json和xml的,但实际很多时候我们都是序列化为json的,所以webapi的序列化比我们用ServiceStack.Text序列化要多花费一些时间,还有如果返回的数据量比较大那么我们应该启动gzip和deflate压缩.而这些实现都不得影响现有的code, 我个人喜欢同时也是习惯用特性来完成压缩和json格式化. 1.压缩的code: namespace MvcApp {

JSON格式化与serialize序列化

一.JSON格式化 1. JSON是什么 JSON是一种数据的存储格式,用来沟通客户端Javascript和服务端PHP的交互.我们把用PHP生成JSON后的字符串传给前台Javascript,Javascirpt就可以很容易的将其反JSON然后应用. 2. 如何使用JSON PHP操作JSON可以使用json_encode()和json_decode()两个函数——一个编码,一个解码.json_encode()可以将数组转换成json格式的文本数据,方便存储和读取,而json_decode()

JSON格式化着色小工具

在我们系统开发过程中越来越多的使用JSON作为数据交换的载体.JSON的特点是层次结构简洁清晰,易于人阅读和编写.同时也易于机器解析和生成.对于机器解析和生成这点本人表示认可,然而对于易于人阅读和编写可以通过下面一段JSON字符串来验证下: {"strValue":"here is str value","nullValue":null,"intvalue":999,"doublevalue":999,&q

json格式化和查看工具

以前一直以来都觉得xml个可读性要比json的可读性好,后来使用了JSON Viewer这个小工具之后,发现自己错了.之前认为json的可读性差,完全是因为没有很好的查看工具.JSON Viewer这个小工具可以很方便的查看json数据. 点击Format可以方便的将凌乱的json格式化. 如果json格式不正确,能够得到很好的提示. 方便的查看键值对. 对数据内容进行查询.

校验字符串是否是JSON格式,将不规则展示的json格式的字符串进行规则展示(json格式化)

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [html] view plain copy var str = {"code": "","svcname": "","version": "","component": "","category": "","requestMs

【转载】C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte

C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte 转载:http://www.itdos.com/Mvc/20150302/0741255.html using System.IO; /// <summary> /// WebApi返回图片 /// </summary> public HttpResponseMessage GetQrCode() { var imgPath = @"D:\ITdosCom\Images

Firefox火狐 浏览器接口调试工具 JSON 格式化

作为一名“IT界”的淫才,还是主攻Web端的淫才,相信大家经常会联调各种接口! 如今APP猖狂的年代接口联调更为频繁,当然我们常用于Firefox火狐 浏览器,所以这里主要讲Firefox火狐 浏览器JSON 格式化问题 先前我们拿到的JSON 数据习惯性Copy 到在线JSON 格式去格式化,更加简洁查看各种信息 http://www.bejson.com/jsonviewernew/ 如果我们长期使用的是火狐浏览器长期使用这玩意那就太Low了 下面介绍个JSON 格式化工具 JSON-han

浏览器json格式化插件 yformater

本人最近做的工作就是写interface,几个前端写前端,他们需要什么样的数据格式,我就得返回这样的数据格式.这就导致每一个接口都得检查json格式是否是他们所需要的.但浏览器直接请求的json格式很乱,不方便检查.于是就在网上查找浏览器格式化的方法.结果还真有,下面我就具体说说. 插件下载方法: 一.谷歌浏览器应用商店下载. 地址:https://chrome.google.com/webstore/search/yformater?hl=zh-CN 但是这种方法有个局限性,就是没有墙的兄弟姐

【转】Popclip的JSON格式化扩展

http://liuyunclouder.github.io/2016/09/29/JSONizer:Popclip的JSON格式化扩展 作为一个MAC党,不好好利用MAC的神兵利器,简直就是罪过.Alfred.Dash.Ulysses.SnippetsLib.Mindnode等大名鼎鼎的效率神器自然不用提了,Popclip更是一个每天都会使用上百遍的好帮手. Popclip? 简单来说,Popclip就是一个对选中的内容作快速处理的工具,比如直接搜索选中的内容.从选中的内容生成二维码.计算选中