2015-06-18 64 views
0

請幫我看看我是新的xamarin.forms和C#我嘗試了每個解決方案都是在計算器中給出,但無法解決無法反序列化當前的JSON對象(例如{「name」:「value」})

using (var httpClient = new HttpClient()) 
{ 
    var response = httpClient.GetAsync(Url).Result; 
    if (response.IsSuccessStatusCode) 
    { 
     var responseContent = response.Content; 
     string contents = await responseContent.ReadAsStringAsync(); 
     List<abcModel> tm = JsonConvert.DeserializeObject<List<abcModel>>(contents); 
     abcMaster = new ObservableCollection<SummaryModel>(); 
     var c = tm[0].SSum.Count(); 
    } 
} 

型號

public class abcModel 
{ 
    public List<SSum> SSum { get; set; } 
} 
public class SSum 
{ 
    public string Name{ get; set; } 
} 

的json

{"a":[{"SSum":[{"Name":"Earth"}]}]} 

錯誤: -

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[abcModel]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

回答

3

因爲你顯然只是想反序列化JSON的嵌套組成部分,像這樣做:

var result = JsonConvert.DeserializeObject<Dictionary<string, List<abcModel>>>(json); 
+0

IM嘗試計數SSUM部分內部存在的JSON總價值如何,我可以得到 –

+0

不清楚你在問什麼......總結伯爵? 'var sum = result [「a」]。Sum(x => x.SSum.Count);'? – stefankmitph

0

你錯過了你的JSON的a財產。你可以反序列化到具有該屬性的類:

public class MyType 
{ 
    public List<abcModel> A { get; set; } 
} 

JsonConvert.DeserializeObject<MyType>(json); 

或跳過該屬性一起(@stefankmitph的回答運作良好),這裏是另一種選擇:

JObject obj = JObject.Parse(json); 

List<abcModel> model = obj["a"].ToObject<List<abcModel>>(); 

剛一說明:通常是C#課程是PascalCased

+0

即時通訊嘗試計算在jum內部的json中存在的總值如何得到 –

+0

@AtulDhanuka:我不太確定你在問什麼 - 你是否在尋找'tm.Sum(i => i。 SSum.Count)'? –

+0

雅總計數 –

0

如果你已經有了JSON字符串,你應該使用像json2csharp這樣的生成器來創建響應DTO。這將防止什麼是收集與單個對象的錯誤。

public class SSum 
{ 
    public string Name { get; set; } 
} 

public class A 
{ 
    public List<SSum> SSum { get; set; } 
} 

public class RootObject 
{ 
    public List<A> A { get; set; } 
} 

現在你可以反序列化完整的對象:

tm = JsonConvert.DeserializeObject<RootObject>(contents); 
相關問題