大家好,我目前正在做最后一年的项目,快结束了。然而,我被困在一件小事上,它在 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/