2016-03-15 138 views
1

我在使用JIL反序列化datetime属性时出现了一些问题。 JSON最初由JIL序列化,存储在数据库中,现在读回。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" 
    } 
] 

HeartbeatDateTime属性,我们已确认通过删除它,JSON反序列化确定。

我们使用这些选项的序列化和反序列化两个:

new Options(dateFormat: DateTimeFormat.MillisecondsSinceUnixEpoch, includeInherited: true); 

我注意到,印记已在本周有一些的NuGet更新,不知道如果它涉及到的是与否。

任何想法?

UPDATE: 类定义是相当长的,但心跳属性定义,是一个使或打破了反序列化是如下:

public DateTime Heartbeat { get; set; } 

这是使用静态反序列化。

+0

但这个问题使用JSON.NET – user9993

+0

正确,这是关于JIL JSON串行器不是JSON.NET – GreatSamps

+0

这是静态还是动态反序列化?类声明是什么样的? –

回答

0

涉及JSON.NET一个可能的解决方案是通过使用customJsonConverter,允许明确转换Unix timestampDateTime

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}

+0

嗨,谢谢你的回答,但是这是针对JSON.NET的,而不是JIL ..我们使用JIL的原因是由于它改进了JSON.NET的性能 – GreatSamps