2015-04-03 30 views
0

我已經看到過類似的其他問題,但這些都是非常複雜的JSON數據,它們在對象中有對象。儘管我正在使用的JSON從來不是靜態的,但我懷疑它與那些複雜的一樣。另外,這是我第一次在C#中使用JSON,所以我有點無知。如何使用C#反序列化JSON數據?

我想要實現的是將從API提供的數據分開,我提示在C#中使用WebRequest。

{ 
    "johhny.debt": { 
     "id":35187540, 
     "name":"johnny.debt", 
     "profileIconId":786, 
     "Level":30, 
     "revisionDate":1428019045000 
    } 
} 

返回的JSON數據與此類似。

我希望能夠訪問在以下方式對所有上面的字符串的屬性:

ID:
名稱:
~~
~~
~~ ...等等。

我假設某些類型的類必須爲此做出?

所有幫助表示讚賞,謝謝大家提前。

+0

只需定義一個反映您的結構的類並將'Deserialize'反映到這個類中。 – DrKoch 2015-04-03 15:02:05

+0

@DKKoch相信與否,這是我需要幫助的。 – 2015-04-03 15:03:14

+0

試過谷歌? http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-C – 2015-04-03 15:04:38

回答

1

從的NuGet

爲內對象( {"id":..., "name": ... })安裝Json.Net
Install-Package Newtonsoft.Json 

https://www.nuget.org/packages/Newtonsoft.Json/

聲明類:

public class InnerObject 
{ 
    [JsonProperty("id")] 
    public int Id { get; set; } 

    [JsonProperty("name")] 
    public string Username { get; set; } 

    [JsonProperty("profileIconId")] 
    public int ProfileIconId { get; set; } 

    [JsonProperty("level")] 
    public int Level { get; set; } 

    [JsonProperty("revisionDate")] 
    public string RevisionDate { get; set; } 
} 

正如你可以看到,可以指定從JSON字段重命名映射。使用JsonPropertyAttribute的網絡對象屬性。

閱讀您的JSON來Dictionary<string,InnerObject>並獲得 「johhny.debt」 鍵的值:

var dict = JsonConvert.DeserializeObject<Dictionary<string, InnerObject>>(jsonText); 
var johhny = dict["johhny.debt"]; 

或者,如果你總是需要解析確切 JSON財產 'johhny.debt',你可以創建根對象類:

public class RootObject 
{ 
    [JsonProperty("johhny.debt")] 
    public InnerObject JohhnyDept { get; set; } 
} 

和反序列化:

var root = JsonConvert.DeserializeObject<RootObject>(jsonText); 
var johhny = root.JohhnyDebt; 
+0

精美的解釋。我假設JSON現在已經放棄並放入一個對象中,我將如何以最佳方式正確訪問這些屬性? – 2015-04-03 15:36:01

+0

dict [「info」]。property也許? – 2015-04-03 15:39:19

+0

作爲簡單的對象屬性。例如:'Console.Write(「Name is」+ johhny.Name);' – 2015-04-03 15:40:22

1

只需要創建一個類這樣

public class RootObject 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
    public int profileIconId { get; set; } 
    public int Level { get; set; } 
    public string revisionDate { get; set; } 
} 

然後安裝json.Net這碼到您的主要方法

var jsonObject=JsonConvert.DeserializeObject<RootObject>(jsonText); 

這是所有

更新

var obj = JObject.Parse(json); 
    var RootObject = new RootObject() 
    { 
     Id = (int)obj["johhny.debt"]["id"], 
     Level = (int)obj["johhny.debt"]["Level"], 
     name = (string)obj["johhny.debt"]["name"], 
     profileIconId = (int)obj["johhny.debt"]["profileIconId"], 
     revisionDate = (string)obj["johhny.debt"]["revisionDate"] 
    }; 
+0

我認爲你需要一個二級課程。第一級是「johny.dept」。該屬性包含第二級別的類。 – DrKoch 2015-04-03 15:07:21

+0

以上回答是爲什麼Coder1409無法正常工作。 – 2015-04-03 15:31:06

+0

你的json的格式已經從你以前的帖子改變了一秒鐘我會更新 – Coder1409 2015-04-03 15:38:13