2011-12-26 22 views
21

有人能告訴我怎麼請我可以創建自定義轉換器如何創建一個JSON.NET日期爲字符串自定義轉換

我知道我可以使用JSON.NET ISODateConvertor,但我要的是具體的,我只是想要將響應中的值作爲「日/月/年」字符串發送。

+1

L.B.的答案給你,你問什麼,但請小心你如何使用它。我們使用ISO日期的原因是因爲它們是明確的和文化不變的。如果您將日期/月/年的值發送出去,比如說「1/4/2013」​​這樣的值 - 有人不知道您的區域設置可能會將其解釋爲1月4日,而不是您打算的4月1日。 – 2013-04-18 17:12:47

+0

@Matt Johnson,謝謝你的回覆,我完全同意你的100%。這是一箇舊的線程,我現在只使用ISO日期,並在客戶端操作:) – DevMania 2013-04-19 09:38:34

回答

39

是這樣的嗎?

string str = JsonConvert.SerializeObject(new DateTimeClass(), new MyDateTimeConvertor()); 

public class DateTimeClass 
{ 
    public DateTime dt; 
    public int dummy = 0; 
} 

public class MyDateTimeConvertor : DateTimeConverterBase 
{ 
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     return DateTime.Parse(reader.Value.ToString()); 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy")); 
    } 
} 
+0

非常感謝人,但我得到一個有關ReadJson方法不執行的錯誤 – DevMania 2011-12-26 22:15:32

+0

既然你說'我只是想發送值爲「日/月/年」響應字符串我只實現了'WriteJson' – 2011-12-26 22:25:40

+0

男人非常感謝,它正在工作,但我總是得到01/01/0001作爲結果,即使例如我的數據庫記錄日期爲例如「2011 -12-27T13:13:45.7052459Z「 – DevMania 2011-12-27 14:31:21

8

如果您正在使用網絡API的自定義格式添加到使用配置:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new MyDateTimeConvertor()) 
+0

非常適合我!確保在全局配置(WebApiConfig)中添加此轉換器,而不是在幫助區域(HelpPageConfig) – 2014-08-12 20:36:38

相關問題