900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > asp.net中JSON的序列化/反序列化

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

时间:2022-01-23 18:58:23

相关推荐

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

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

using System;

using System.Text;

using System.IO;

using System.Runtime.Serialization.Json;

using System.Text.RegularExpressions;

namespace JosnHelper

{

/// <summary>

/// Json数据转换封装

/// </summary>

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<T>(sJason);

*/

/// <summary>

/// 将时间由"\/Date(10000000000-0700)\/" 格式转换成 "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" 格式的字符串转换成"\/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)\/" 格式转换成 "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;

}

}

}

序列化方法

/zerolsy/archive//06/22/2576404.aspx

序列化与反序列化 web service

/hubj/archive//11/23/1339468.html

/12639172/viewspace-501576

使用.NET框架自带的Json序列化类

/thread-33294-1-1.html

Remoting中数据序列化

/page/e/0116/11506.html

http://dingtao-wgs./blog/static/502607147181162050/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。