C# 如何创建JSON.NET日期到字符串自定义转换器

C# 如何创建JSON.NET日期到字符串自定义转换器,c#,json.net,C#,Json.net,有人能告诉我如何创建自定义转换器吗 我知道我可以使用JSON.NET ISODateConvertor,但我想要的是特定的,我只想在响应时将值作为“日/月/年”字符串发送。类似这样的内容 string str = JsonConvert.SerializeObject(new DateTimeClass(), new MyDateTimeConvertor()); public class DateTimeClass { public DateTime dt; public i

有人能告诉我如何创建自定义转换器吗

我知道我可以使用JSON.NET ISODateConvertor,但我想要的是特定的,我只想在响应时将值作为“日/月/年”字符串发送。

类似这样的内容

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") );
    }
}

如果您使用的是Web Api,请使用以下命令将自定义格式化程序添加到配置中:

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

非常感谢,伙计,但是我得到了一个关于ReadJson方法未实现的错误,因为您说
我只想在响应中以“日/月/年”字符串的形式发送值
我只实现了
WriteJson
伙计,非常感谢,它正在工作,但我总是得到01/01/0001作为结果,即使是例如我的DB记录日期也是如此“2011-12-27T13:13:45.7052459Z“您好,通过使用ParseExact:)修复了这个问题。我遇到了类似的问题,尽管我在委托处理程序中将当前线程区域性分配给fr fr,但我可以看到当WriteJson方法中的调试点被命中时,区域性是en US。因此,日期时间值不是特定于区域性的格式。有什么问题吗?L.B.的回答给出了您的要求,但请小心使用。我们使用ISO日期的原因是因为它们是明确的和文化不变的。如果您以日/月/年的形式发送值,请使用
1/4/2013
-不知道您所在地区的人可能会将其解释为1月4日,而不是您计划的4月1日。@Matt Johnson,谢谢您的回复,我完全同意您的说法。这是一个旧线程,我现在只使用ISO日期,并在客户端操作它:)这对我来说太棒了!确保您是在全局配置(WebApiConfig)而不是帮助区域(HelpPageConfig)添加此转换器