2015-04-03 38 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