2016-09-30 72 views
0

我從JSON格式的API服務器獲得答案。然後我嘗試用json.net反序列化它並調用一些對象。但是這導致了NullReferenceException。在調試期間,我確實發現從_507888780開始的類在反序列化json字符串時不會被填充。 我希望你的某個人能幫我解決這個問題。json.net DeserializeObject不填充導致NullReferenceException的類

我使用的反序列化,並調用對象的代碼:

string file = "{\"status\":\"ok\",\"meta\":{\"count\":1},\"data\":{\"507888780\":[{\"all\":{\"spotted\":467,\"hits_percents\":83,\"wins\":281,},\"tank_id\":2849},{\"all\":{\"spotted\":224,\"hits_percents\":63,\"wins\":32,},\"tank_id\":9473}]}}"; 
Rootobject rootobject = JsonConvert.DeserializeObject<Rootobject>(file); 
Console.WriteLine(rootobject.data._507888780[1].tank_id); 
Console.WriteLine(rootobject.data._507888780[1].all.hits_percents); 

及其類別至極由VS自動創建:

public class Rootobject 
{ 
    public string status { get; set; } 
    public Meta meta { get; set; } 
    public Data data { get; set; } 
} 
public class Meta 
{ 
    public int count { get; set; } 
} 
public class Data 
{ 
    public _507888780[] _507888780 { get; set; } 
} 
public class _507888780 
{ 
    public All all { get; set; } 
    public long tank_id { get; set; } 
} 
public class All 
{ 
    public long spotted { get; set; } 
    public long hits_percents { get; set; } 
    public long wins { get; set; } 
} 

我也把測試項目.NET小提琴,讓您可以更輕鬆地重現它: https://dotnetfiddle.net/gwSA1C 您還可以在那裏看到Json字符串。

回答

1

您的代碼將工作修改JSON.Net ISN」能夠將JSON中的507888780屬性名稱映射到_507888780類屬性名稱。在這種情況下,你需要通過添加一個JsonProperty屬性指向好的方向圖書館:

public class Data 
{ 
    [JsonProperty("507888780")] 
    public _507888780[] _507888780 { get; set; } 
} 

.NET Fiddle

+0

謝謝,完美的作品:) – Ben

0

JSON有錯誤,使這_507888780代替507888780

正確的Json

string file = "{\"status\":\"ok\",\"meta\":{\"count\":1},\"data\":{\"_507888780\":[{\"all\":{\"spotted\":467,\"hits_percents\":83,\"wins\":281,},\"tank_id\":2849},{\"all\":{\"spotted\":224,\"hits_percents\":63,\"wins\":32,},\"tank_id\":9473}]}}"; 

我已經測試後如預期

+0

嗯,在我的項目中,我從一個API服務器獲取這些數據,所以我不能改變它..我想我可以使用正則表達式,但不是有另一種更好的方法嗎? – Ben

+0

JSON有效。就像JSON可以包含以'$'開頭但C#不能的屬性一樣。 –

+0

好吧然後裝飾'[JsonProperty(「507888780」)]'地圖 –

相關問題