c# – NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1831字,纯文字阅读大概需要3分钟。
内容图文
我试图将Unix时间戳反序列化为DateTime.在我的情况下,我需要做更多的检查才能从时间戳设置属性到DateTime.如果我使用Newtonsoft.Json的DateTime,它将它反序列化为UTC时间,我需要将其反序列化为特定的时区
问题是我无法得到正确的时间.似乎我的字符串长时间解析失败了.如果我可以得到长的unix时间戳,我可以让其余的逻辑工作
我有一个名为Alert的课程
class Alert
{
// Some properties
[JsonConverter(typeof(UnixTimestampJsonConverter))]
public DateTime Created { get; set; }
// Some more properties
}
UnixTimestampJsonConverter类是
class UnixTimestampJsonConverter : JsonConverter
{
// Other override methods
public override object ReadJson (JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.EndObject)
return null;
if (reader.TokenType == JsonToken.StartObject) {
long instance = serializer.Deserialize<long> (reader);
return TimeUtils.GetCustomDateTime (instance);
}
return null;
}
}
其中TimeUtils.GetCustomDateTime(instance)获取长unixtimestamp并将其转换为特定时区的DateTime对象.
我在配置文件78的PCL库中,所以我对System.TimeZoneInfo的访问权限有限,我使用PCL版本的NodaTime进行其他时区计算.
如果有人感兴趣,这是Github上的项目 – MBTA Sharp
解决方法:
我很确定您需要做的就是调用serializer.Deserialize.这样做会使读者正确前进,您不需要做任何其他事情:
public class UnixTimestampJsonConverter : JsonConverter
{
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
long ts = serializer.Deserialize<long>(reader);
return TimeUtils.GetMbtaDateTime(ts);
}
public override bool CanConvert(Type type)
{
return typeof(DateTime).IsAssignableFrom(type);
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanRead
{
get { return true; }
}
}
示例:https://dotnetfiddle.net/Fa8Zis
内容总结
以上是互联网集市为您收集整理的c# – NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用全部内容,希望文章能够帮你解决c# – NewtonSoft.Json自定义JsonConverter反序列化为DateTime不起作用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。