NewtonSoft.Json自定义DateTime序列化 [英] NewtonSoft.Json custom DateTime serialization

查看:232
本文介绍了NewtonSoft.Json自定义DateTime序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个日期时间字段对象。我需要不同的序列化每个字段。我该怎么办呢?

I have object with two DateTime fields. I need to serialize each of the fields differently. How can I do it?

我想:

JsonConvert.SerializeObject(
      obj,
      Formatting.None,
      new IsoDateTimeConverter {DateTimeFormat = "MM.dd.yyyy"});

不过,这并不为我工作。它适用格式为整个对象。我可以用不同的格式不同的属性?

But it doesn't work for me. It applies format for the whole object. Can I use different format for different properties?

推荐答案

NewtonSoft.Json 的结构,这是一个有点难以理解,你可以用类似下面的自定义的转换器做你想要的:

NewtonSoft.Json has a structure that's a bit difficult to understand, you can use something like the following custom converter to do what you want:

[TestMethod]
public void Conversion()
{
    var obj = new DualDate()
    {
        DateOne = new DateTime(2013, 07, 25),
        DateTwo = new DateTime(2013, 07, 25)
    };
    Assert.AreEqual("{\"DateOne\":\"07.25.2013\",\"DateTwo\":\"2013-07-25T00:00:00\"}", 
        JsonConvert.SerializeObject(obj, Formatting.None, new DualDateJsonConverter()));
}

class DualDate
{
    public DateTime DateOne { get; set; }
    public DateTime DateTwo { get; set; }
}

class DualDateJsonConverter : JsonConverter
{

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {

        JObject result = new JObject();

        DualDate dd = (DualDate)value;

        result.Add("DateOne", JToken.FromObject(dd.DateOne.ToString("MM.dd.yyyy")));
        result.Add("DateTwo", JToken.FromObject(dd.DateTwo));
        result.WriteTo(writer);
    }

    // Other JsonConverterMethods
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DualDate);
    }

    public override bool CanWrite
    {
        get
        {
            return true;
        }
    }
    public override bool CanRead
    {
        get
        {
            return false;
        }
    }

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

这篇关于NewtonSoft.Json自定义DateTime序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆