2016-03-15 122 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