2011-12-26 43 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