사용자 정의 json 날짜 서열화

3070 단어 json
C#의 datetime가 날짜로 서열화되면 구역질이 납니다. 자바스크립트 Serializer 방법이 서열화되면\/Date(***)\/예전에는 JS에서 정규 처리를 했기 때문에 JSON을 사용할 때 특히 불편합니다.그래서 오늘 서열화 방법을 좀 뒤척였어요.
public class DateTimeConverter : JavaScriptConverter

    {

        public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)

        {

            if (string.IsNullOrEmpty(dictionary["Value"].ToString()) || type != typeof(DateTime?))

                return null;

            if (string.IsNullOrEmpty(dictionary["Value"].ToString()) || type != typeof(DateTime))

                return DateTime.MinValue;

            string dateString = dictionary["Value"].ToString().Replace("new Date(", "").Replace(")", "");

            string[] spli = dateString.Split(',');

            return DateTime.Parse(string.Format("{0}-{1}-{2} {3}:{4}:{5}", spli[0], spli[1], spli[2], spli[3], spli[4], spli[5]));

        }



        public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)

        {

            IDictionary<string, object> result = new Dictionary<string, object>();

            if (obj == null)

                result["Value"] = string.Empty;

            else

            {

                DateTime jsdate = (DateTime)obj;

                result["Value"] = string.Format("new Date({0},{1},{2},{3},{4},{5})", jsdate.Year, jsdate.Month-1, jsdate.Day, jsdate.Hour, jsdate.Minute, jsdate.Second);

            }

            return result;

        }



        public override IEnumerable<Type> SupportedTypes

        {

            get

            {

                IList<Type> typelist = new List<Type>();

                typelist.Add(typeof(DateTime));

                typelist.Add(typeof(DateTime?));

                return typelist;

            }

        }

상기 코드의 서열화는 이미 테스트를 하였으며, 반서열화는 매우 드물기 때문에 테스트를 하지 않았다.
JS에서 new Date()에는 다음과 같은 구조 함수가 있습니다.
 1  new Date("month dd,yyyy hh:mm:ss"); 2  new  Date("month dd,yyyy"); 3  new  Date(yyyy,mth,dd,hh,mm,ss); 4  new Date(yyyy,mth,dd); 5  new Date(ms);
첫 번째, 두 번째 방식은 월이 영문이어서 직접 사용하기가 불편하다.
네 번째는 시간을 소홀히 했고, 다섯 번째는 시간을 GMT 시간과 1970년 1월 1일 사이의 밀리초 차이였다.
그래서 간단하고 실용적인 건 네 번째밖에 없어요.
JS의 상Mth는 0에서 시작하고 C#의datetim은 1월에 1을 줄여야 하기 때문이다.몬스는 1부터.
 
이제 우리는 서열화 규칙을 만들어 냈으니, 다음 단계는 서열화를 실현하는 것이다.
 var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();

            jsonSerializer.RegisterConverters(new System.Web.Script.Serialization.JavaScriptConverter[] { new DateTimeConverter() });

jsonSerializer.Serialize(DateTime.Now);

이렇게 하면 서열화된 Json 형식 문자열을 얻을 수 있습니다.

좋은 웹페이지 즐겨찾기