C# JSON 解析问题

标签 c# asp.net json parsing

大家好,我目前正在做最后一年的项目,快结束了。然而,我被困在一件小事上,它在 C# 中解析下面的 JSON 字符串。

我的错...复制并粘贴了 JSON 文件的摘录。这是我检查 jsonutils.org 时有效的整个 JSON 字符串

{ 
    "activities-steps" : [ 
        { 
            "dateTime" : "2016-02-10",
            "value" : "2624"
        } 
    ],
    "activities-steps-intraday" : { 
        "dataset" : [ 
        { 
            "time" : "00:00:00",
            "value" : 0
        },
        { 
            "time" : "00:01:00",
            "value" : 0
        },
        { 
            "time" : "00:02:00",
            "value" : 0
        },
        { 
            "time" : "00:03:00",
            "value" : 0
        },
        { 
            "time" : "00:04:00",
            "value" : 0
        },
        { 
            "time" : "00:05:00",
            "value" : 0
        },
        { 
            "time" : "00:06:00",
            "value" : 0
        },
        { 
            "time" : "00:07:00",
            "value" : 0
        },
        { 
            "time" : "00:08:00",
            "value" : 0
        },
        { 
            "time" : "00:09:00",
            "value" : 0
        },
        { 
            "time" : "00:10:00",
            "value" : 0
        },
        { 
            "time" : "00:11:00",
            "value" : 0
        },
        { 
            "time" : "00:12:00",
            "value" : 0
        },
        { 
            "time" : "00:13:00",
            "value" : 0
        },
        { 
            "time" : "00:14:00",
            "value" : 0
        },
        { 
            "time" : "00:15:00",
            "value" : 0
        },
        { 
            "time" : "00:16:00",
            "value" : 0
        },
        { 
            "time" : "00:17:00",
            "value" : 0
        }
        ],
        "datasetInterval" : 1,
        "datasetType" : "minute"
    }
}

我需要第一个 JSON 对象中的 dateTime 值,然后是第二个对象中的时间和值项的值。我已经实现了下面的代码,但是它一直给我一个 NullReferenceException

这些方法用于帮助解析 JSON 对象

public class RootObject
{
    public Activity activity { get; set; }
    public ActivityGranular activity_granular { get; set; }
}

public class Activity
{
    public string dateTime { get; set; }
    public string value { get; set; }
}

 public class ActivityGranular
{
    public List<ActivityGranularDatapoint> dataset { get; set; }
    public int datasetGranularity { get; set; }
    public string datasetGranularityType { get; set; }
}

public class ActivityGranularDatapoint
{
    public string time { get; set; }
    public int value { get; set; }
}

主类中的 MainCode 执行时在上面的根对象类中的两个根元素中返回 null 并给出一个 NullReferenceExceptions

resultsJSON.Replace("-", "_");

root = JsonConvert.DeserializeObject<RootObject>(resultsJSON);

activity = root.activites_steps;
activityGranular = root.activities_steps_intraday;

for (int a = 0; a < activityGranular.dataset.Count; a++)
{
    activityGranularDatapoint[a].time = activityGranular.dataset[a].time;
   activityGranularDatapoint[a].value = activityGranular.dataset[a].value;
}

非常感谢所有帮助:)

最佳答案

如果您的 json 中的属性名称不符合您的需要,只需使用 JsonProperty 属性。只是不要使用:

  • 解决或破解 json 数据。
  • 不替换json的任何内容
  • 顺其自然。

下面的代码只是通过如下重命名类的属性来工作

public class RootObject
{
    [JsonProperty("activities-steps")]
    public List<Activity> ActivitesSteps { get; set; }

    [JsonProperty("activities-steps-intraday")]
    public ActivityGranular ActivitiesStepsIntraday { get; set; }
}

public class Activity
{
    [JsonProperty("dateTime")]
    public string DateTime { get; set; }

    [JsonProperty("value")]
    public string Value { get; set; }
}

public class ActivityGranular
{
    [JsonProperty("dataset")]
    public List<ActivityGranularDatapoint> DataSet { get; set; }

    [JsonProperty("datasetInterval")]
    public int DatasetInterval { get; set; }

    [JsonProperty("datasetType")]
    public string DatasetType { get; set; }
}

public class ActivityGranularDatapoint
{
    [JsonProperty("time")]
    public string Time { get; set; }

    [JsonProperty("value")]
    public int Value { get; set; }
}

关于C# JSON 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35324316/

相关文章:

c# - 如何使用 C# 更改代码中的标签字体

asp.net - listview/repeater/gridview数据源应该添加到aspx页面还是代码后面?

c# - JSON 反序列化格式不正确

android - Picasso 使用 HTTP post 加载图像

javascript - 使用VBA抓取实时数据

c# - ZedGraph - 如何从点到时间更改 X 轴?

c# - 在 C# 中打开注册表项时出现 Null 值错误

asp.net - 如何清除 Asp.Net 按钮上所有文本框的值单击

c# - 不要从路径名 C# 中删除字符

c# - 使用第一个/最早日期返回多个记录