NewtonSoft.Json自定义DateTime序列化 [英] NewtonSoft.Json custom DateTime serialization
本文介绍了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屋!
查看全文