C#读出包含对象的json列表

时间:2017-08-17 18:07:13

标签: c# json

我正在尝试从一些JSON代码中获取数组 我从这里得到的是:JSON code source

我有这个,但我不知道如何使输出可用。

empty rdd
size of rdd 1000

我不知道如何从输出中获取 //Some other code above this line var jsonout = new JavaScriptSerializer().Deserialize<List<Rootobject>>(json); } } //JSON structure public class Rootobject { public Class1[] Property1 { get; set; } } public class Class1 { public string group { get; set; } public string tracker { get; set; } public string measureTime { get; set; } public int minAgo { get; set; } public float lat { get; set; } public float lon { get; set; } public History[] history { get; set; } } public class History { public float lat { get; set; } public float lon { get; set; } public int minAgo { get; set; } } latlon等。你们这是一个很好的方法吗? (我在C#中使用JSON非常新。)

3 个答案:

答案 0 :(得分:1)

您的数据模型错误 - 额外级别Class1是不必要的。将您的JSON发布到http://json2csharp.com/,您可以获得更正的数据模型,其中RootObject具有Class1的属性:

public class History
{
    public double lat { get; set; }
    public double lon { get; set; }
    public int minAgo { get; set; }
}

public class RootObject
{
    public string group { get; set; }
    public string tracker { get; set; }
    public string measureTime { get; set; }
    public int minAgo { get; set; }
    public double lat { get; set; }
    public double lon { get; set; }
    public List<History> history { get; set; }
}

然后做:

var jsonout = new JavaScriptSerializer().Deserialize<List<RootObject>>(json);
foreach (var root in jsonout)
{
    Console.WriteLine(root.measureTime); // For instance.
    Console.WriteLine(root.lat); // For instance.
    Console.WriteLine(root.lon); // For instance.
}

答案 1 :(得分:0)

您正在反序列化错误的类型。您没有Rootobject的集合,只有一个Rootobject包含Class1的集合。

var jsonout = new JavaScriptSerializer().Deserialize<Rootobject>(json);

此时只需使用对象表示法。

foreach(var thing in jsonout.Property1)
{
    thing.lat;
    thing.lon;
}

答案 2 :(得分:0)

您可以声明这样的通用类

public class Class1
{
    public string group { get; set; }
    public string tracker { get; set; }
    public string measureTime { get; set; }
    public int minAgo { get; set; }
    public float lat { get; set; }
    public float lon { get; set; }
    public List<History> history { get; set; }

    public List<History> GetListHistories(){
      return history;
    }
}

public class History
{
    public float lat { get; set; }
    public float lon { get; set; }
    public int minAgo { get; set; }
}

像这样实施

var jsonout = new JavaScriptSerializer().Deserialize<List<Class1>>(json);
foreach(var item in jsonout)
{
  console.Write(item.gruop);
  console.Write(item.tracker);
  // more properties
  // and:
  List<History> list = item.GetListHistories();
  foreach(var l in list)
  {
     console.Write(l.lat);
     console.Write(l.lon);
  }
}