using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Web.Script.Serialization;
namespace Common
{
public class ZJsonHelper
{
#region 实体对象转json
/// <summary>
/// 实体对象转json
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string ObjectConvertJson<T>(T o)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(o.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, o);
StreamReader sr = new StreamReader(ms);
ms.Position = 0;
string data = sr.ReadToEnd();
sr.Close();
ms.Close();
return data;
}
/// <summary>
/// json转实体对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T JsonConvertObject<T>(string json)
{
return new JavaScriptSerializer().Deserialize<T>(json);
}
#endregion
#region DataTable转Json
/// <summary>
/// DataTable转Json
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Json(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{\"");
jsonBuilder.Append(dt.TableName);
jsonBuilder.Append("\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
if (dt.Rows.Count > 0)
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
}
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
/// <summary>
/// 基于Msdn提供方式实现DataTable转Json
/// </summary>
/// <param name="dt"></param>
/// <param name="jsonName"></param>
/// <returns></returns>
public static string DataTableToJson(DataTable dt, string jsonName = "")
{
StringBuilder Json = new StringBuilder();
if (string.IsNullOrWhiteSpace(jsonName))
{
jsonName = !string.IsNullOrWhiteSpace(dt.TableName) ? dt.TableName : "ZDataTable2Json";
}
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++)
{
Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");
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 DataSet转Json
/// <summary>
/// DataSet转Json
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string Dataset2Json(DataSet ds)
{
StringBuilder json = new StringBuilder();
foreach (DataTable dt in ds.Tables)
{
json.Append("{\"");
json.Append(dt.TableName);
json.Append("\":");
json.Append(DataTable2Json(dt));
json.Append("}");
} return json.ToString();
}
#endregion
#region List转Json
public static string ListToJson<T>(List<T> list, string jsonName = "")
{
StringBuilder json = new StringBuilder();
if (string.IsNullOrWhiteSpace(jsonName))
{
jsonName = !string.IsNullOrWhiteSpace(jsonName) ? jsonName : "ZList2Json";
}
json.Append("{\"" + jsonName + "\":[");
int i = 0;
foreach (T o in list)
{
string oJson = ObjectConvertJson<T>(o);
json.Append(i == 0 ? oJson : "," + oJson);
i++;
}
json.Append("]}");
return json.ToString();
}
#endregion
}
}