如何在数组内部获取JSON对象属性?

时间:2016-04-28 01:41:54

标签: c# json

我是JSON的新人,如果我不知道,我会学习,请原谅我。我有以下JSON:

"data": [
{
  "id": 373644788,
  "description": "something ",
  "start": "2016-04-28T02:23:01+02:00",
  "end": "2016-04-28T02:23:12+02:00",
  "updated": "2016-04-28T02:24:05+02:00",
  "dur": 11000,
  "user": "John Smith",
  "project": "First Project",

},
{
  "id": 373635064,
  "description": "None",
  "start": "2016-04-28T01:43:42+02:00",
  "end": "2016-04-28T01:44:06+02:00",
  "updated": "2016-04-28T01:44:21+02:00",
  "dur": 24000,
  "user": "Drake",
  "project": "Second Project",

}]

这些JSON对象中的每一个都是一个单独的项目,我需要从每个对象中提取数据(ID, Name, Start, End)并将它们放入我的C# Class和它们应该为每个项目单独存储,因为它们稍后将导出到与这些属性具有相同列的数据库中。 我创建了Class Definitions

 public class Definitions
    {
        public int id { get; }
        public string user { get; }
        public double dur { get; }
        public string project { get; }

        public override string ToString()
        {

              return  string.Format("ID: {0}, Name: {1}, Duration: {2}, Projekt: {3}", this.id, this.user, this.dur, this.project);


        }

问题在于,我无法访问JSON内的属性。如果我尝试Deserialize,我的输出中的所有属性总是0,好像我无法访问这些属性。

第二个问题是我如何存储它们?我的意思是当它们被导出到数据库时,它们中的每一个都应该自动放入单独的行中,每行包含(ID,Nama,Start,End)列。 谢谢。

Deserilize:

String jsonString  = File.ReadAllText(@"D:\Json.json");
                Definitions def = JsonConvert.DeserializeObject<Definitions>(jsonString);
                Console.WriteLine(def);

1 个答案:

答案 0 :(得分:3)

由于您的JSON具有名为data的属性,并且此属性是包含许多对象的数组。你需要的是从json的根目录反序列化,即:从data属性。

您已经使用与JSON相同的属性编写了类,这是正确的,您现在想要的是为data属性编写另一个类。

public class DefinitionRoot 
{
    public List<Definitions> data {get; set;}
}

现在我们有一个名为data的属性的类,它包含Definitions的列表。

现在我们可以反序列化如下。

var allDefinitions = JsonConvert.DeserializeObject<DefinitionsRoot>(yourJsonData);

完成此步骤后,您的allDefinitons.data将包含项目详细信息列表。

希望这是有帮助的