2010-12-04 122 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