静态与非静态类

时间:2016-03-21 16:35:09

标签: c# json

这是我的代码在我的公共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中创建了这个类,而不是在我的Project Solution中创建一个新类(如果这很重要?)

2 个答案:

答案 0 :(得分:4)

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

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

字段List<MyObject> list = ...包含从json文件反序列化的所有数据(如果json文件中不存在任何数据,则为none!)。

我想你想要访问json文件的所有数据,在这种情况下,我更喜欢通过foreach循环遍历对象。

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

答案 1 :(得分:1)

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

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