asp.net中JSON的序列化/反序列化

asp.net中JSON的序列化/反序列化

直接上代码吧~有注释滴。

using System;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text.RegularExpressions;
namespace JosnHelper
{
///
/// Json数据转换封装
///
public static class JsonHelper
{
/*
利用.Net FrameWork3.5提供的Json库实现C#与Json数据转换时,对于Datetime类型的数据,生成格式如下数据
/Date(10000000000-0700)/ 不直观,同时相当部分js库无法直接使用.利用正则表达式替换成"yyyy-MM-dd HH:mm:ss"格式以便于使用
使用举例:
T t = new T();
String sJson =t.ToJson();
T t1 = JosonHelper.FromJson(sJason);
*/
///
/// 将时间由"/Date(10000000000-0700)/" 格式转换成 “yyyy-MM-dd HH:mm:ss” 格式的字符串
///
///
///
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;
}
///
/// 将时间由 “yyyy-MM-dd HH:mm:ss” 格式的字符串转换成"/Date(10000000000-0700)/" 格式
///
///
///
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;
}
///
/// 扩展Object 方法 ToJson
///
///
///
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)/" 格式转换成 “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" 格式的字符串转换成"\/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;
    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值