2010-12-04 118 views
1

單核心2.6.4-2.13.x86_64 Json.NET 3.5版本8JSON.NET反序列化「掛起」(單聲道)

我叫解串器和它的作品 - 我能看到的物體產生 (反序列化),但是然後解串器從不退出/返回。

List<ListEntry> listed_entries = JsonConvert.DeserializeObject<List<ListEntry>>(payload); 
Console.WriteLine("Deserialization complete"); 

ListEntry對象被創建,然後程序'掛起'。 「反序列化完成」從未出現。

的JSON有效載荷是1,938K:

[{"entityName": "Contact", "version": 27, "displayName": "", "objectId": 11446184}, {"entityName": "Contact", "version": 33, "displayName": "", "objectId": 10148760}, {"entityName": "Contact", "version": 35, "displayName": "", "objectId": 12695703}, {"entityName": "Contact", "version": 33, "displayName": "", "objectId": 7575210}, 
... ] 

沒有尾隨換行符。沒有複雜的;它解碼爲:

public class ListEntry 
{ 
    public ListEntry() 
    { 
    Console.WriteLine("Created ListEntry"); 
    } 

    [JsonPropertyAttribute("entityName")] 
    public string EntityName { get; set; } 

    [JsonPropertyAttribute("objectId")] 
    public int Objectid { get; set; } 

    [JsonPropertyAttribute("version")] 
    public int Version { set; get; }  

    [JsonPropertyAttribute("displayname")] 
    public string DisplayName { set; get; }  
} 
+0

您可以發佈您的JSON? – Oded 2010-12-04 15:14:59

回答

2

我發現了這個問題;在其中一個JSON元素中存在「null」的「版本」屬性。這當然不能反序列化爲.NET「int」。反序列化線程中的異常似乎不會傳播到主線程。總之,修改序列化對象解決了這個問題:

[JsonPropertyAttribute("version")] 
public int? Version 
{ 
    set 
    { 
    if (value == null) 
     this.version = 0; 
    else 
     this.version = (int)value;  
    } 
    get { return this.version; } 
} 
+0

我剛剛遇到了同樣的事情。我已經將測試信息轉發給Xml序列化的管理員。 – Gonzalo 2010-12-08 23:28:39

0

的正確方法與可空類型的工作:

[JsonPropertyAttribute("version")] 
public int? Version 
{ 
    set 
    { 
     this.version = value ?? default(int); 
    } 
    get 
    { 
     return this.version; 
    } 
} 
+0

我不會說這是正確的方法。如果某個屬性可以爲空,則應該可以將其值設置爲null。否則,該物業不應是空的'。 – erikkallen 2010-12-05 13:32:52