ASP. NET 에서 JSON 은 시간 을 직렬 화하 고 역 직렬 화 합 니 다.

8363 단어 asp.net
JSON 형식 은 날짜 와 시간 을 직접 지원 하지 않 습 니 다.DateTime 값 은 '/ Date (0 + 0800) /' 형식의 JSON 문자열 로 표시 되 며, 그 중 첫 번 째 숫자 는 GMT 시간 대 에서 1970 년 1 월 1 일 자정 이후 정상 시간 (비 여름 시간) 으로 지 나 는 밀리초 입 니 다.이 숫자 는 이전의 시간 을 나타 내기 위해 마이너스 일 수 있다.'+ 0800' 의 부분 을 선택 할 수 있 습 니 다. 이 시간 은 Local 형식 에 속 합 니 다. 즉, 역 직렬 화 할 때 로 컬 시간 대 로 전환 해 야 합 니 다.이 부분 이 없 으 면 시간 을 거꾸로 Utc 로 정렬 합 니 다.
public static class JsonHelper

{

    /// <summary>

    ///   Json  

    /// </summary>

    /// <typeparam name="T"></typeparam>

    /// <param name="obj"></param>

    /// <returns></returns>

    public static string JsonSerializer<T>(this T obj)

    {

        //JavaScriptSerializer serialize = new JavaScriptSerializer();

        //return serialize.Serialize(obj);

        var json = new DataContractJsonSerializer(obj.GetType());

        using (var stream = new MemoryStream())

        {

            json.WriteObject(stream, obj);

            string szJson = Encoding.UTF8.GetString(stream.ToArray());
string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator evaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(p); szJson = reg.Replace(szJson, evaluator);
return szJson; } } /// <summary> /// Json Model /// </summary> /// <typeparam name="T"></typeparam> /// <param name="szJson"></param> /// <returns></returns> public static T JsonDeserialize<T>(this string szJson) { string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator evaluator = new MatchEvaluator(ConvertDateStringToJsonDate); // Regex reg = new Regex(p); szJson = reg.Replace(szJson, evaluator);
T obj
= Activator.CreateInstance<T>(); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson))) { var serializer = new DataContractJsonSerializer(obj.GetType()); return (T)serializer.ReadObject(ms); } } /// <summary> /// Json /// </summary> private static string ConvertJsonDateToDateString(Match m)  // { string result = string.Empty; DateTime dt = new DateTime(1970,1,1); dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value)); dt = dt.ToLocalTime(); result = dt.ToString("yyyy-MM-dd HH:mm:ss"); return result; } /// <summary> /// JSON /// </summary> private static string ConvertDateStringToJsonDate(Match m) { string result = string.Empty; DateTime dt = DateTime.Parse(m.Groups[0].Value); dt = dt.ToUniversalTime(); TimeSpan ts = dt - DateTime.Parse("1970-01-01"); result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds); return result; } }

좋은 웹페이지 즐겨찾기