using System;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text.RegularExpressions;
namespace JosnHelper
{
/// <summary>
/// Json數(shù)據(jù)轉(zhuǎn)換封裝
/// </summary>
public static class JsonHelper
{
/*
利用.Net FrameWork3.5提供的Json庫實現(xiàn)C#與Json數(shù)據(jù)轉(zhuǎn)換時,對于Datetime類型的數(shù)據(jù),生成格式如下數(shù)據(jù)
/Date(10000000000-0700)/ 不直觀,同時相當部分js庫無法直接使用.利用正則表達式替換成"yyyy-MM-dd HH:mm:ss"格式以便于使用
使用舉例:
T t = new T();
String sJson =t.ToJson();
T t1 = JosonHelper.FromJson<T>(sJason);
*/
/// <summary>
/// 將時間由"\/Date(10000000000-0700)\/" 格式轉(zhuǎn)換成 "yyyy-MM-dd HH:mm:ss" 格式的字符串
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
private static string GetDatetimeString(Match m)
{
string sRet = "";
try
{
System.DateTime dt = new DateTime(1970, 1, 1);
dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
dt = dt.ToLocalTime();
sRet = dt.ToString("yyyy-MM-dd HH:mm:ss");
}
catch
{ }
return sRet;
}
/// <summary>
/// 將時間由 "yyyy-MM-dd HH:mm:ss" 格式的字符串轉(zhuǎn)換成"\/Date(10000000000-0700)\/" 格式
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
private static string GetDatetimeJson(Match m)
{
String sRet = "";
try
{
DateTime dt = DateTime.Parse(m.Groups[1].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-01-01");
sRet = string.Format("\\/Date({0}-0700)\\/", ts.TotalMilliseconds);
}
catch
{ }
return sRet;
}
/// <summary>
/// 擴展Object 方法 ToJson
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static String ToJson(this object obj)
{
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
jsonSerializer.WriteObject(ms, obj);
String sRet = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
//將時間由"\/Date(10000000000-0700)\/" 格式轉(zhuǎn)換成 "yyyy-MM-dd HH:mm:ss" 格式的字符串
string sPattern = @"\\/Date\((\d+)-\d+\)\\/";
MatchEvaluator myMatchEvaluator = new MatchEvaluator(GetDatetimeString);
Regex reg = new Regex(sPattern);
sRet = reg.Replace(sRet, myMatchEvaluator);
return sRet;
}
/// <summary>
/// Jason deSerialize
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sJasonData"></param>
/// <returns></returns>
public static T FromJson<T>(String sJasonData)
{
//將時間由 "yyyy-MM-dd HH:mm:ss" 格式的字符串轉(zhuǎn)換成"\/Date(10000000000-0700)\/" 格式
string sPattern = @"(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})";
MatchEvaluator myMatchEvaluator = new MatchEvaluator(GetDatetimeJson);
Regex reg = new Regex(sPattern);
string src = reg.Replace(sJasonData, myMatchEvaluator);
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(src));
T obj = (T)jsonSerializer.ReadObject(ms);
ms.Close();
return obj;
}
}
}
asp.net 序列化方法
http://blog.csdn.net/zerolsy/archive/2008/06/22/2576404.aspx
asp.net序列化與反序列化 web service
http://www.cnblogs.com/hubj/archive/2008/11/23/1339468.html
http://space.itpub.net/12639172/viewspace-501576
Asp.Net使用.NET框架自帶的Json序列化類
http://bbs.zbitedu.com/thread-33294-1-1.html
Remoting中數(shù)據(jù)序列化
http://www.xker.com/page/e2007/0116/11506.html
http://dingtao-wgs.blog.163.com/blog/static/5026071420097181162050/