博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSON格式化
阅读量:6813 次
发布时间:2019-06-26

本文共 6921 字,大约阅读时间需要 23 分钟。

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 -
1
,
1
);
        
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 -
1
,
1
);
        
jsonString.Append(
"]"
);
        
return
jsonString.ToString();
    
}
    
#endregion
}

转载于:https://www.cnblogs.com/wuxl360/p/5422061.html

你可能感兴趣的文章
45、我的C#学习笔记11
查看>>
sqlserver日期函数
查看>>
git rebase vs git merge
查看>>
如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路
查看>>
最新最全linux系统调优指南(centos7.X)
查看>>
我的友情链接
查看>>
ceph luminous 版本 osd掉线处置
查看>>
maven依赖关系中 scope属性含义
查看>>
周鸿祎的“流氓”可否借鉴?
查看>>
nginx下图片服务器配置
查看>>
linux 压缩与解压缩命令汇总
查看>>
Python3.x和Python2.x的区别
查看>>
手机电视
查看>>
【职场攻略】比你的工资更重要的十件事
查看>>
Linux 常用命令学习-文件及文件夹操作相关命令-持续更新
查看>>
OSI参考模型与排错
查看>>
Spark Streaming原理简析
查看>>
TCP协议的三次握手+四次断开
查看>>
Selenium2.41.0—获取动态资源 (转)
查看>>
Confluence 6 配置数字格式
查看>>