2015-10-12 63 views
2

使用JsonSerializerSettings,我能夠消耗/序列微軟DateTime格式,但DateTime是否似乎繼續使用8601標準如何使JSON.NET反序列化到Microsoft日期時間?

JsonSerializerSettings = new JsonSerializerSettings { 
        DateFormatHandling = DateFormatHandling.MicrosoftDateFormat 
       } 

我試圖寫一個自定義JsonConverter來處理反序列化的ISO反序列化,但我在轉義字符上遇到麻煩。

writer.WriteValue ("\\/Date(" + x + ")\\/"); 

被寫爲

"\\/Date(1446145200000)\\/" 

人以前解決這個?一直在尋找周圍到很多沒有找到一個好的解決方案

回答

0

它看起來像你的輸入日期已序列化爲蜱。在您的自定義轉換器中,您可以反序列化JSON值並使用它來初始化DateTime對象?

2

這裏你不需要自定義轉換器。使用DateFormatHandling = DateFormatHandling.MicrosoftDateFormat設置是正確的方法,可用於序列化和反序列化。確保您將設置適當地傳遞給SerializeObjectDeserializeObject方法。如果您沒有通過設置,將使用默認的格式,這是ISO 8601

using System; 
using Newtonsoft.Json; 

public class Program 
{ 
    public static void Main() 
    { 
     Foo foo = new Foo { Date = new DateTime(2015,10,29,19,0,0) }; 

     JsonSerializerSettings settings = new JsonSerializerSettings 
     { 
      DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, 
      Formatting = Formatting.Indented 
     }; 

     string json = JsonConvert.SerializeObject(foo, settings); 
     Console.WriteLine(json); 

     foo = JsonConvert.DeserializeObject<Foo>(json, settings); 
     Console.WriteLine(foo.Date.ToString()); 
    } 
} 

class Foo 
{ 
    public DateTime Date { get; set; } 
} 

輸出:

{ 
    "Date": "\/Date(1446145200000+0000)\/" 
} 
10/29/2015 7:00:00 PM 

小提琴:https://dotnetfiddle.net/hnJIO4

+0

我使用[改裝](https://github.com/paulcbetts/refit/blob/master/Refit)庫,它實際上使用'Serialize'和'Deserialize '調用我(我正在傳遞上面發佈的設置),但看着回購它看起來像設置正在使用這兩種方法...奇怪。 – cdm5214

+0

您可以編輯您的問題併發布證明此問題的[MCVE](http://stackoverflow.com/help/mcve)嗎? –