JSON 직렬 화 와 역 직렬 화 날짜 시간 처리
Person 클래스 수정, LastLoginTime 추가:
public class Person { public string Name { get; set; } public int Age { get; set; } public DateTime LastLoginTime { get; set; } }
Person p = new Person(); p. Name = "장삼";p.Age = 28; p.LastLoginTime = DateTime.Now; string jsonString = JsonHelper.JsonSerializer(p);
직렬 화 결과:
{"Age":28,"LastLoginTime":"//Date(1294499956278+0800)//","Name":" "}
1. 배경 에서 정규 표현 식 을 사용 하여 교체 처리 합 니 다.JSonHelper 수정:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime.Serialization.Json; using System.IO; using System.Text; using System.Text.RegularExpressions; /// /// JSON 직렬 화 및 역 직렬 화 보조 클래스 / / public class JSonHelper {/ / / / JSON 직렬 화 / / public static string JSonSerializer (T t) {DataContractJSonSerializer ser = new DataContractJSonSerializer (typeof (T)); Memory Stream ms = new Memory Stream (); ser. Write Object (ms, t); string jsonString = Encoding. UTF8. GetString (ms. ToArray (); ms. Close (); / / JSon 의 Date 문자열 string p = @ "/ / Date / (/ d +) / + / d + /) / / /"; / * / / / Date / ([/ + / -] / d +) | (/ d +) [/ + /] / d + /) / / / / / * / MatchEvaluator matchEvaluator = new MatchEvaluator (ConvertJSonDateToDateString); Regex reg = new Regex (p); jsonString = reg. Replace (jsonString, matchEvaluator); return jsonString;}/ / / / / / / / / JSON 역 직렬 화 / / public static T JsonDeserialize (string jsonString) {/ / / / "yyy - MM - ddHHH: mm: ss" 형식의 문자열 을 "/ / date (1294499956278 + 0800) / /" 형식의 string p = @ "/ {4} - / {2} - / {2} - / {2} / / {2} / / {2} / / / {2}: / / {2}: / {2}: / {2}: / {2}: / {2}: / {2}: / {2}: / {2}: / {2}: / {{2}}: / {{2}}: / {2}: / {2}: / / {2}}}}; MatMatex (p); jsonString = reg. Replace (jsonString, matchEvaluator); DataContractJSonSerializer ser = new DataContractJSonSerializer (typeof (T)); Memory Streams = new Memory Stream (Encoding. UTF8. GetBytes (jsonString)); T obj = (T) ser. ReadObject (ms); return obj;} / / / / / / / / / / / Json 을 직렬 화 하 는 시간 은 / date (1294499956278 + 0800)문자열 / / 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 ("yy - MM - dd HH: mm: ss"); return result;}/ / / / / 시간 문자열 을 JSon 시간 / / private static string 으로 변환 DateStringToJSonDate (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; } }
직렬 화 데모:
Person p = new Person(); p. Name = "장삼";p.Age = 28; p.LastLoginTime = DateTime.Now; string jsonString = JsonHelper.JsonSerializer(p);
실행 결과:
{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":" "}
역 직렬 화 데모:
string json = "{/"Age/":28,/"LastLoginTime/":/"2011-01-09 00:30:00/",/"Name/":/" /"}";
p=JsonHelper.JsonDeserialize(json);
실행 결과:
배경 에서 문자열 을 바 꾸 는 것 은 적용 범위 가 좁 아 글로벌 화 된 다양한 언어 를 고려 하면 더욱 번 거 로 울 수 있다.
2. JavaScript 로 처리
function ChangeDateFormat(jsondate) { jsondate = jsondate.replace("/Date(", "").replace(")/", ""); if (jsondate.indexOf("+") > 0) { jsondate = jsondate.substring(0, jsondate.indexOf("+")); } else if (jsondate.indexOf("-") > 0) { jsondate = jsondate.substring(0, jsondate.indexOf("-")); } var date = new Date(parseInt(jsondate, 10)); var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); return date.getFullYear() + "-" + month + "-" + currentDate; }
간단 한 데모:
ChangeDateFormat("//Date(1294499956278+0800)//");
결과:
2011-1-8
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.