2016-03-21 6 views
0

Это то, что мой код выглядит в моем общедоступном Form1()Static против Нестатических классов

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

Oooooh я вижу! Поэтому, чтобы разделить их, например, «Дата начала и конечная дата типа: 1», «Тип 2 ...» и «Тип 3» ... могу ли я сделать «foreach» (тип MyObject, start, end item in list)() '? – 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 
} 
Смежные вопросы