【问题标题】:Serializing C# DateTime to JSON date with JSON.NET使用 JSON.NET 将 C# DateTime 序列化为 JSON 日期
【发布时间】:2017-08-30 18:02:01
【问题描述】:

我有一个 C# 模型,当它序列化为 JSON 时,应该在 JSON 中呈现日期属性,例如:Date(123456790)

为了实现这一点,我将属性添加到 DateTime 属性中:

    [JsonConverter(typeof(JavaScriptDateTimeConverter))]
    public DateTime DateOfBirth { get; set; }

但是,当模型被序列化时,生成的 JSON 如下所示:

{
    "Member": {
        "FirstName": "firstname",
        "LastName": "lastname",
        "UserName": "username",
        "Password": "password",
        "FullName": "firstname lastname",
        "DateOfBirth": newDate(350546400000),
        "Gender": "male",
        "Email": "my@email.com"
    },
    "UserId": "b8a8fd7583b14d6a81bbaeb561aef765",
}

我需要它看起来像这样:

{
    "Member": {
        "FirstName": "firstname",
        "LastName": "lastname",
        "UserName": "username",
        "Password": "password",
        "FullName": "firstname lastname",
        "DateOfBirth": "/Date(350546400000)/",
        "Gender": "male",
        "Email": "my@email.com"
    },
    "UserId": "b8a8fd7583b14d6a81bbaeb561aef765",
}

根据documentation,执行此操作的属性是DateFormatHandling,应该是MicrosoftDateFormat。

但是我不想修改所有转换到这个,只是这个模型......所以我尝试创建一个使用该格式的自定义序列化程序:

public class CustomJavaScriptDateTimeConverter : JavaScriptDateTimeConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;
        base.WriteJson(writer, value, serializer);
    }
}

并更新了属性以匹配:

    [JsonConverter(typeof(CustomJavaScriptDateTimeConverter))]
    public DateTime DateOfBirth { get; set; }

但是虽然自定义序列化器被命中,并且属性发生了变化,但输出仍然是原来的“new Date(350546400000)”而不是我想要的。

有人知道我在这里做错了什么吗?

【问题讨论】:

    标签: c# json datetime serialization


    【解决方案1】:

    你的CustomConverter可以是这样的

    public class CustomJavaScriptDateTimeConverter : JavaScriptDateTimeConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var js = new JsonSerializer() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
            js.Serialize(writer, value);
        }
    }
    

    【讨论】:

    • 哇哦,就是那个!谢谢!请问你是怎么知道的,有没有关于它是如何工作的文档,我想了解更多,或者这只是你的专业知识:) 不管怎样,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多