2016-03-21 217 views
0

这是我的代码看起来像我的公共Form1中()静态与非静态类

while (accessReader.Read()) 
    { 
     for (int i = 0; i < count; i++) 
     { 
     string urlpart2= accessReader.GetValue(i).ToString(); 
     WebRequest request = WebRequest.Create("urlpart1" + urlpart2+ "urlpart3"); 
     string json; 
     var response = request.GetResponse(); 
     request.ContentType = "application/json; charset=utf-8"; 

     using (var streamr = new StreamReader(response.GetResponseStream())) 
     { 
      json = streamr.ReadToEnd(); 
      List<MyObject> list = JsonConvert.DeserializeObject<List<MyObject>>(json); 
      var date = MyObject.Start; 

      //MessageBox.Show(date.ToString()); 

这是我代表不同的变量我的JSON字符串类返回

public class MyObject 
     { 
      public int Type { get; set; } 
      public string Country { get; set; } 
      public string Channel { get; set; } 
      public string Code { get; set; } 
      public DateTime Start { get; set; } 
      public DateTime End { get; set; } 
     } 

这是什么json字符串将返回,唯一的区别将改变可能是类型,代码,开始和结束。 - 我想要开始和结束值。

[{"Type":1,"Country":"CA","Channel":"","Code":"1EZ","Start":"2014-10-24T00:00:00","End":"2015-10-23T00:00:00"},{"Type":2,"Country":"","Channel":"","Code":"UAD","Start":"2014-10-24T00:00:00","End":"2017-10-23T00:00:00"},{"Type":2,"Country":"","Channel":"","Code":"TPQ","Start":"2014-10-24T00:00:00","End":"2017-10-23T00:00:00"},{"Type":3,"Country":"","Channel":"","Code":"SVC_PRIORITY","Start":"2014-10-24T00:00:00","End":"2017-10-23T00:00:00"}] 

我是相当新的编程,我遇到了一个错误我真的不明白“是必需的非静态字段,方法或属性的对象引用”。

而且我创造了这个班我Form1.cs的范围内,而不是在我的项目解决方案创建一个新类(如果该事项?)

回答

4

您尝试访问MyObject.Start像这将是一个静态的属性或字段。但是它是一个实例字段,基本上你需要获得一个实例来访问该字段。

MyObject obj = list[0]; 
var date = obj.Start; 

领域List<MyObject> list = ...包含得到了来自JSON文件反序列化的所有数据(如果在JSON文件中不存在数据没有!)。

我想你想访问json文件的所有数据,在这种情况下,我宁愿迭代通过foreach循环的对象。

foreach (MyObject item in list) { .... } 
+0

哇,我明白了!所以为了像Type:1的开始日期和结束日期,类型2的...和类型3的...我可以做一个foreach(MyObject类型,开始,列表中的最终项目)()'? – Havoux

+0

@Havoux所有的数据都在一个MyObject实例中。当你在你的json中有多个时,遍历它们是很有用的。还是我误解了你? –

+0

不用你100%非常感谢你的先生! – Havoux

1

问题是与行var date = MyObject.Start;您已经创建了MyObjects的列表。要访问它们,你必须使用列表索引,即var first = list[0]返回第一个元素。然后你就可以得到所需的日期为:first.Start 为了处理您的列表中的每个条目可以使用foreach循环如下:

foreach (var obj in list) { 
    // use obj.Start, obj.End values 
}