2016-02-12 41 views
0

我從一個REST服務,看起來像這樣得到這個JSON數據傳回:在C#中,我該如何反序列化這個json?

[ [ [ {"Name": "Joe", "Comment": "Load", "Updated": null, "Test": ""} ] ] ] 

[ [ [ {"Name": "Joe", "Comment": "Load", "Updated": null, "Test": ""}, {"Name": "Bill", "Comment": "123", "Updated": null, "Test": ""} ] ] ] 

我做了一個「複製JSON作爲班」在Visual Studio功能,它創造了這個:

public class Rootobject 
{ 
    public Project[][][] Property1 { get; set; } 
} 

public class Project 
{ 
    public string Name { get; set; } 
    public string Comment { get; set; } 
    public string Updated { get; set; } 
    public string Test { get; set; } 
} 

但是當我嘗試使用此代碼反序列化:

var results = new JsonDeserializer().Deserialize<Rootobject>(response); 

我得到一個錯誤,指出:

「」類型的異常出現在RestSharp.dll但在用戶代碼中沒有處理 其他信息:無法投類型的對象RestSharp.JsonArray '鍵入'System.Collections.Generic.IDictionary`2 [System.String,System.Object]'

你能否告訴我可能會做錯什麼(注意:我沒有任何控制權如何更改數據格式不是一種選擇)

此外,爲了確認這似乎是有效的JSON從JSONLlint:

enter image description here

+1

試試這個網站[jason2csharp](HTTP ://json2csharp.com/)你的傑森看起來不是正確的格式或者btw – MethodMan

+0

我試着用jsonlint來確認它是有效的json並且它成功返回:http://jsonlint.com/。我已經包含jsonlint的屏幕截圖 – leora

回答

1

可以反序列化JSON尤其像這樣使用Json.NET:

var json = "[ [ [ {\"Name\": \"Joe\", \"Comment\": \"Load\", \"Updated\": null, \"Test\": \"\"}, "+ 
       " {\"Name\": \"Bill\", \"Comment\": \"123\", \"Updated\": null, \"Test\": \"\"} ] ] ]"; 

var deserializedObject = JsonConvert.DeserializeObject<List<List<List<Project>>>>(json); 

,並從嵌套列表得到所有的Project S:

var allProjects = deserializedObject.SelectMany(x => x.SelectMany(y => y)).ToList(); 
+0

非常好。 @Szabolcs似乎你得到了正確的答案,並沒有必要實現一個自定義的解串器。 (如果這工作:)) –

2

使用Newtonsoft.Json NuGet包, 嘗試

JSONConvert.DeserialiseObject<Rootobject>(response) 

編輯:BTW,我試圖用你的JSON上http://json2csharp.com/和它說解析你的JSON不起作用。請確保它是有效的。所以我懷疑任何json解析庫將能夠解析您的JSON。

但是實現自己的解串器是可能的,當外部服務返回無效JSON

我也許可以幫助你反序列化,如果你能告訴我什麼JSON你會得到一個理想的解決方案時,服務返回多個Project對象。編輯2:Szabolcs的解決方案看起來很有希望,但我仍然建議使用JSON測試它,以獲得多個Product對象。我聞到一些不好的事情&它的低劣的第三方服務。總是很好的測試。

+1

http://jsonlint.com/似乎說這是有效的JSON(我添加了問題的屏幕截圖)。此外,我嘗試使用上面的代碼,我得到了類似的錯誤列在我的問題 – leora

+0

我可以幫助你反序列化它,如果你告訴我什麼時候JSON服務返回多個**項目**對象。 –