如何使用 Newtonsoft 反序列化 EPOCH
Posted
技术标签:
【中文标题】如何使用 Newtonsoft 反序列化 EPOCH【英文标题】:How to deserialize EPOCH using Newtonsoft 【发布时间】:2021-12-18 02:40:25 【问题描述】:我需要使用 Newtonsoft.Json 反序列化 JSON,我的 JSON 中的一个值具有 EPOCH 格式:
*"fechaGrabacionODH":
"$date": 1634689986082
,*
我正在使用它来反序列化,但它不起作用
*var settings = new JsonSerializerSettings
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
;*
*Data = JsonConvert.DeserializeObject<Constructores_IdPnODH.Data>(payload_Decryp, settings);**
我收到此错误:
解析值时遇到意外字符:。路径 'fechaGrabacionODH',第 1 行,位置 261。
我非常感谢任何帮助。 提前致谢。
【问题讨论】:
【参考方案1】:您可以使用自定义JsonConverter
public class EpochConverter : JsonConverter
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
var jObject = new JObject();
jObject["$date"] = new DateTimeOffset((DateTime)value).ToUnixTimeMilliseconds();
jObject.WriteTo(writer);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
var jObject = JObject.Load(reader);
var epoch = jObject.GetValue("$date").Value<long>();
return DateTimeOffset.FromUnixTimeMilliseconds(epoch).UtcDateTime;
public override bool CanRead => true;
public override bool CanConvert(Type objectType) => objectType == typeof(DateTime);
然后用一个属性应用它
class YourObject
[JsonConverter(typeof(EpochConverter))]
public DateTime fechaGrabacionODH;
dotnetfiddle
【讨论】:
以上是关于如何使用 Newtonsoft 反序列化 EPOCH的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Newtonsoft.Json 正确反序列化数组中的嵌套对象? [复制]
如何使用 newtonsoft json 解决有关无法反序列化当前(例如 “name”:“value”)的难题 [关闭]