我在使用datetime
反序列化JIL
属性时遇到了一些问题。 JSON
最初由JIL
序列化,存储在数据库中,现在可以读回来。
反序列化器抛出了一个例外:
预期:,,}
这是有问题的json:
[
{
"BuildVersion": 0,
"DataCenterId": "LD5",
"Heartbeat": 1458060298923,
"ID": "0393ceb7-92cf-45f6-8cea-ac25878598e3",
"IsMarkedSoftDeleted": false,
"IsNew": true,
"ItemKey": "0393ceb7-92cf-45f6-8cea-ac25878598e3",
"ItemType": "Node",
"MajorVersion": 0,
"MaxAccounts": 25,
"MinorVersion": 0,
"Name": "LN-PETER2",
"OriginalId": null,
"RunningAccounts": 0,
"TypeId": "MT4 Client"
}
]
Heartbeat
是DateTime
属性,我们已确认通过删除它,JSON
反序列化确定。
我们将这些选项用于序列化和反序列化:
new Options(dateFormat: DateTimeFormat.MillisecondsSinceUnixEpoch, includeInherited: true);
我注意到Sigil本周有一些nuget更新,不确定它是否与此有关。
有什么想法吗?
更新: 类定义很长,但心跳属性的定义是决定反序列化的定义如下:
public DateTime Heartbeat { get; set; }
这是使用静态反序列化。
答案 0 :(得分:0)
涉及JSON.NET
的一种可能解决方案是使用custom JsonConverter
,允许将Unix timestamp
明确转换为DateTime
:
class VersionInfo
{
public int BuildVersion { get; set; }
public String DataCenterId { get; set; }
[JsonConverter(typeof(MicrosecondEpochConverter))]
public DateTime Heartbeat { get; set; }
public Guid ID { get; set; }
}
static void Main(string[] args)
{
String json = @"
[
{
""BuildVersion"": 0,
""DataCenterId"": ""LD5"",
""Heartbeat"": 1458060298923,
""ID"": ""0393ceb7-92cf-45f6-8cea-ac25878598e3""
}
]";
var versionInfo = JsonConvert.DeserializeObject<IList<VersionInfo>>(json);
}
versionInfo
对象将包含已转换的DateTime
- {3/15/2016 4:44:58 PM}