Newtonsoft.Json自定义序列化日期

时间:2016-07-08 22:22:28

标签: c# json serialization json.net

我使用Newtonsoft.Json将我的日期从C#序列化为javscript我想要做的是让json序列化程序使用当前文化将日期格式化为字符串

以下是我的Json序列化程序所得到的内容:

JsonConvert.SerializeObject(DateTime.Now);

结果是:

"2016-07-08T17:10:17.6722753-05:00"

但我更喜欢的是:

"08/07/2016 17:10:57"

因为我目前的文化是巴西,我希望我的日期以上述方式显示。

是否可以全局(对于任何可能被序列化的日期)告诉Newtonsoft.Json中的json序列化程序使用它就好像它正在执行date.ToString()(因为ToString尊重System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat中的文化并相应地给出正确的格式

2 个答案:

答案 0 :(得分:25)

您需要将JsonSerializerSettings.DateFormatString设置为所需的格式。

var jsonSettings = new JsonSerializerSettings();
jsonSettings.DateFormatString = "dd/MM/yyy hh:mm:ss";

string json = JsonConvert.SerializeObject(someObject, jsonSettings);

之后,您可以在每次使用序列化程序时传递设置对象,也可以按照dbc引用的answer中的步骤进行操作。虽然,你没有提到它在哪里运行(ASP.NET,桌面,UWP等),所以你在全球范围内设置它可能会有所不同。

答案 1 :(得分:1)

是的,您可以在JsonSerializer设置中使用转换器。

public class SpecialDateTimeConverter : DateTimeConverterBase
    {
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
        {
             writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy hh:mm:ss"));
        }
    }

    string convertedDateTime = JsonConvert.SerializeObject(DateTime.Now, Formatting.Indented, new SpecialDateTimeConverter());