2011-10-24 3 views
0

CultureInfo.CurrentCulture를 사용하도록 System.Web.Extensions에서 JavaScriptSerializer를 얻으려면 어떻게해야합니까?JavaScriptSerializer가 CultureInfo.CurrentCulture를 사용하지 않음

DD 형식/MM 형식/YYYY 형식의 날짜 시간을 역 직렬화하는 예외가 발생합니다. 현재 미국 형식으로되어 있기 때문에 우리의 응용 프로그램에는 맞지 않습니다. JavaScriptSerializer에 MDSN 노트 당

답변

1

:

Date 객체로 JSON 표현 "/ 일 (틱의 수) /". 틱 수는 UTC 1970 년 1 월 1 일 자정 이후 경과 한 틱 수 (밀리 초)를 나타내는 양수 또는 음수 long 값입니다.

지원되는 최대 날짜 값은 MaxValue (12/31/9999 11:59:59 PM)이고 지원되는 최소 날짜 값은 MinValue (1/1/0001 12:00:00 AM)입니다.

당신은 당신의 유형을 처리 DateTime에 대한 JavaScriptConverter를 등록해야합니다 :

마음에
public class DateTimeConverter : JavaScriptConverter 
{ 

    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) 
    { 
     if (dictionary == null) 
      throw new ArgumentNullException("dictionary"); 

     if (type == typeof(DateTime)) 
     { 
      DateTime time; 
      time = DateTime.Parse(dictionary["Time"].ToString(), /** put your culture info here **/); 

      return time; 
     } 

     return null; 
    } 

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) 
    { 
     DateTime? time = obj as DateTime?; 

     if (time == null) 
     { 
      Dictionary<string, object> result = new Dictionary<string, object>(); 
      result["Time"] = time.Value; 

      return result; 
     } 

     return new Dictionary<string, object>(); 
    } 

    public override IEnumerable<Type> SupportedTypes 
    { 
     get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(DateTime) })); } 
    } 
} 

곰을 당신이 당신의 JSON 실제로 객체 속성 이름의 관점에서해야합니다 무엇을 설명해야합니다 (아마도 "시간"이 아닌 다른 이름을 사용하고있을 것입니다).

하면 JavaScriptSerializer에 등록 :

serializer.RegisterConverters(new List<JavaScriptConverter>() { new DateTimeConverter() }); 

마지막으로,이 할 수있는 더 많은, 그리고이에 구축하는 유일한 예이다 있습니다. 명시 적으로 "Time"이라는 이름의 사전 항목을 검색 중이며 구문 분석 실패를 처리하지 않습니다. DateTime을 사용하는 필드에는 하나 이상의 이름이있을 수 있습니다.

+0

답변 해 주셔서 감사합니다. 2 가지 질문 : 직렬화 된 결과를 여전히 원시 유형으로 표현할 수 있습니까? 나는. 다른 객체 w/Time 속성 안에 감싸지 않았습니까? 또한 변환기가 SupportedTypes 속성의 모든 파생 형식을 처리하는 방법을 알고 있습니까? 특정 인터페이스를 특정 방식으로 직렬화하기 위해이 기능을 사용하기를 원하기 때문에 묻습니다. –

+0

첫 번째 질문에 대한 답이 확실하지 않습니다. 특별히 처리하고자하는 모든 유형의 경우, 변환기를 작성하고 위와 동일하게 등록해야합니다. – doctorless

관련 문제