jsonhelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Runtime.Serialization.Json;

namespace TMFHTong
{
public class JsonHelper
{
/// <summary>
/// 获取json中的指定值
/// </summary>
/// <param name="json"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string GetJosnValue(string json, string key)
{
string result = string.Empty;
if (!string.IsNullOrEmpty(json))
{
key = "\"" + key.Trim('"') + "\"";
int index = json.IndexOf(key) + key.Length + 1;
if (index > key.Length + 1)
{
//先截逗号,若是最后一个,截“}”号,取最小值
int end = json.IndexOf(',', index);
if (end == -1)
{
end = json.IndexOf('}', index);
}
//index = json.IndexOf('"', index + key.Length + 1) + 1;
result = json.Substring(index, end - index);
//过滤引号或空格
result = result.Trim(new char[] { '"', ' ', '\'' });
}
}
return result;
}

/// <summary>
/// 生成json,不带table名称
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTable2Jsons(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
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("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
return jsonBuilder.ToString();
}
/// <summary>
/// 生成电脑带table名称
/// </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("\":\"");
if (dt.Columns[j].ColumnName == "HouseLogo" || dt.Columns[j].ColumnName == "AllPhoto" || dt.Columns[j].ColumnName == "ActivityPhoto" || dt.Columns[j].ColumnName == "IndexPhoto" || dt.Columns[j].ColumnName == "ShowPhoto" || dt.Columns[j].ColumnName == "RoomLogo")
{
if (dt.Rows[i][j].ToString() != "")
{
jsonBuilder.Append(GetAbsoluteUri() + "useimg/" + dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
else
{
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
}
else
{
jsonBuilder.Append(dt.Rows[i][j].ToString());
jsonBuilder.Append("\",");
}
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
/// <summary>
/// 获取网站的域名
/// </summary>
/// <returns></returns>
private static string GetAbsoluteUri()
{
int index = HttpContext.Current.Request.Url.AbsoluteUri.LastIndexOf('/');
string path = HttpContext.Current.Request.Url.AbsoluteUri.Substring(0, index + 1);
return path;
}

#region 格式化Json字符串
public static IList<T> JsonToList<T>(string html)
{
IList<T> result = new List<T>();
html = FormatJson(html);
try
{
DataContractJsonSerializer _Json = new DataContractJsonSerializer(result.GetType());
byte[] _Using = System.Text.Encoding.UTF8.GetBytes(html);
System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);
_MemoryStream.Position = 0;
object obj = _Json.ReadObject(_MemoryStream); ;
result = (IList<T>)obj;
}
catch (Exception)
{
html = AttributeToVariable(html);
DataContractJsonSerializer _Json = new DataContractJsonSerializer(result.GetType());
byte[] _Using = System.Text.Encoding.UTF8.GetBytes(html);
System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);
_MemoryStream.Position = 0;
object obj = _Json.ReadObject(_MemoryStream); ;
result = (IList<T>)obj;
}
return result;
}

/// <summary>
/// 格式化Json字符串,使之能转换成List
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
public static string FormatJson(string value)
{
string p = @"(new Date)\(+([0-9,-]+)+(\))";
MatchEvaluator matchEvaluator = new MatchEvaluator(FormatJsonMatch);
Regex reg = new Regex(p);
bool isfind = reg.IsMatch(value);
value = reg.Replace(value, matchEvaluator);
return value;
}
/// <summary>
/// 将Json序列化的时间由new Date(1373387734703)转为字符串"\/Date(1373387734703)\/"
/// </summary>
private static string FormatJsonMatch(Match m)
{
return string.Format("\"\\/Date({0})\\/\"", m.Groups[2].Value);
}

public static string AttributeToVariable(string value)
{
string p = @"\<([A-Z,a-z,0-9,_]*)\>k__BackingField";
MatchEvaluator matchEvaluator = new MatchEvaluator(AttributeToVariableMatch);
Regex reg = new Regex(p);
bool isfind = reg.IsMatch(value);
value = reg.Replace(value, matchEvaluator);
return value;
}
private static string AttributeToVariableMatch(Match m)
{
return m.Groups[1].Value;
}
#endregion
}
}

 

调用方式:

string json="[{\"NewsID\": \"18\",\"NewsTitle\": \"明星来了\",\"NewsContent\": \"http:20130408022113980.jpg\",\"NewsTime\": \"2013-09-29 14:23:41\"},";
json += "{\"NewsID\": \"19\",\"NewsTitle\": \"领导莅临参观\",\"NewsContent\": \"http:20130408022145429.jpg\",\"NewsTime\": \"2013-10-29 14:23:44\"}]";
IList<NewsDetail> model = JsonHelper.JsonToList<NewsDetail>(json);
foreach (NewsDetail newsd in model)
{
Response.Write(newsd.NewsTitle + "," + newsd.NewsContent+","+newsd.NewsTime);
}

posted @ 2013-09-29 15:22  王者杂货铺  阅读(246)  评论(0编辑  收藏  举报