2011-10-24 23 views

回答

1

每MDSN備註JavaScriptSerializer:

日期目的,JSON表示爲 「/日期(蜱數)/」。蜱數是正值或負值,表示自1970年1月1日午夜以來經過的蜱數(毫秒)。

支持的最大日期值是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實際上有對象屬性名稱的條款(你可能使用的不是「Time」的名字)。

註冊它在你的JavaScriptSerializer:

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

最後,請注意,有更多可以做,而這僅僅是建立在一個例子。顯式地,它正在搜索名稱爲「Time」的字典項目,並且不處理分析失敗。對於使用DateTime的字段,您可能不只有一個名稱。

+0

感謝您的回答! 2個問題:是否有可能將序列化結果仍然表示爲原始類型?即沒有它包裹在另一個對象瓦特/時間屬性?另外,您是否知道轉換器處理SupportedTypes屬性的所有派生類型的方法?我問,因爲我也想用這個特性以某種方式序列化一個特定的接口。 –

+0

我不確定你的第一個問題的答案。對於任何需要專門處理的類型,您都需要爲其創建一個轉換器,並按照上面的方法註冊它。 – doctorless

相關問題