jsonのシーケンス化と逆シーケンス化は時間フォーマット変換をサポートする
6243 ワード
.NETが持参したjsonシーケンスには時間フォーマットの問題があり,自分が書いたjsonフォーマットのシーケンス化と逆シーケンス化を解決するために
1.導入されたネーミングスペース
2.josnのシーケンス化
3.jsonの逆シーケンス化
时には、本当に自分が适时に通り抜けて帰って、それがまだ子供の自分に会うことができることを望んでいます
1.導入されたネーミングスペース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Text.RegularExpressions;
2.josnのシーケンス化
/// <summary>
/// JSON
/// </summary>
public static string JsonSerializer<T>(this T t)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
var jsonString = serializer.Serialize(t);
// Json Date
// \\/Date\((\d+)\+?\d+\)\\/() -
string p = @"\\/Date\((\d+)\+\d+\)\\/";
MatchEvaluator matchEvaluator = new MatchEvaluator(
m =>
{
DateTime dt = new DateTime(1970, 1, 1);
dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
dt = dt.ToLocalTime();
return dt.ToString("yyyy-MM-dd HH:mm:ss");
}
);
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
return jsonString;
}
3.jsonの逆シーケンス化
/// <summary>
/// JSON
/// </summary>
public static T JsonDeserialize<T>(this string jsonString)
{
// "yyyy-MM-dd HH:mm:ss" "\/Date(1294499956278+0800)\/"
string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
MatchEvaluator matchEvaluator = new MatchEvaluator(
m => {
DateTime dt = DateTime.Parse(m.Groups[0].Value);
dt = dt.ToUniversalTime();
TimeSpan ts = dt - DateTime.Parse("1970-01-01");
return string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
});
Regex reg = new Regex(p);
jsonString = reg.Replace(jsonString, matchEvaluator);
JavaScriptSerializer serializer = new JavaScriptSerializer();
T obj = serializer.Deserialize<T>(jsonString);
return obj;
}
时には、本当に自分が适时に通り抜けて帰って、それがまだ子供の自分に会うことができることを望んでいます