C# 从JObject获取数据
我将JSON数据存储在一个字符串中,通过使用C# 从JObject获取数据,c#,asp.net,json.net,C#,Asp.net,Json.net,我将JSON数据存储在一个字符串中,通过使用JObject,我试图从JSON数据中获取值。我无法找出代码的根本问题是什么,因为我无法从JSON对象获取数据。下面是我的代码片段。如果有人能帮我解决这个问题,我将不胜感激 String text; try { var response = (HttpWebResponse)request.GetResponse(); using (var sr = new StreamReader(response.GetResponseStream
JObject
,我试图从JSON数据中获取值。我无法找出代码的根本问题是什么,因为我无法从JSON对象获取数据。下面是我的代码片段。如果有人能帮我解决这个问题,我将不胜感激
String text;
try {
var response = (HttpWebResponse)request.GetResponse();
using (var sr = new StreamReader(response.GetResponseStream()))
{
text = sr.ReadToEnd();
JObject jObject = JObject.Parse(text);
string haha = (string)jObject["value/segments/requests/count/sum"];
ViewBag.gotstring = haha;
}
System.Diagnostics.Debug.WriteLine(text);
} catch(Exception e) {
System.Diagnostics.Debug.WriteLine(url);
System.Diagnostics.Debug.WriteLine(e.ToString()); }
return View();
以下是JSON:
{
"value": {
"start": "2018-08-12T04:44:38.941Z",
"end": "2018-08-12T16:44:38.941Z",
"interval": "PT30M",
"segments": [
{
"start": "2018-08-12T14:00:00Z",
"end": "2018-08-12T14:30:00Z",
"segments": [
{
"requests/count": {
"sum": 2
},
"request/name": "GET Home/Index"
},
{
"requests/count": {
"sum": 1
},
"request/name": "GET Home/About"
},
{
"requests/count": {
"sum": 1
},
"request/name": "GET Home/Contact"
}
]
},
{
"start": "2018-08-12T14:30:00Z",
"end": "2018-08-12T15:00:00Z",
"segments": [
{
"requests/count": {
"sum": 2
},
"request/name": "GET Account/Register"
},
{
"requests/count": {
"sum": 1
},
"request/name": "GET Account/Login"
}
]
},
{
"start": "2018-08-12T15:30:00Z",
"end": "2018-08-12T16:00:00Z",
"segments": [
{
"requests/count": {
"sum": 8
},
"request/name": "GET Home/Index"
},
{
"requests/count": {
"sum": 8
},
"request/name": "GET Home/About"
}
]
}
]
}
}
你能试试吗
编辑:似乎段是一个数组,这将仅获得第一段的总和
string haha=(string)jObject[“value”][“segments”][0][“segments”][“requests/count”][“sum”]代码>jObject
不能以这种方式工作。它返回可以按键查询的字典,但键是单级的。也就是说,您将能够获得如下数据:
var haha = jObject["value"]["segments"];
但除此之外,它变得非常复杂。您最好定义一个表示JSON的C#类并将其序列化。Visual Studio中的一个简单的“编辑=>Paste Special=>JSON as Class”给出了以下内容:
public class Rootobject
{
public Value value { get; set; }
}
public class Value
{
public DateTime start { get; set; }
public DateTime end { get; set; }
public string interval { get; set; }
public Segment[] segments { get; set; }
}
public class Segment
{
public DateTime start { get; set; }
public DateTime end { get; set; }
public Segment1[] segments { get; set; }
}
public class Segment1
{
[JsonProperty("requests/count")]
public RequestsCount requestscount { get; set; }
[JsonProperty("request/name")]
public string requestname { get; set; }
}
public class RequestsCount
{
public int sum { get; set; }
}
然后像这样反序列化:
var serialised = JsonConvert.DeserializeObject<Rootobject>(json);
var haha = serialised.value.segments.FirstOrDefault().segments.FirstOrDefault().requestscount.sum;
var serialized=JsonConvert.DeserializeObject(json);
var haha=serialized.value.segments.FirstOrDefault().segments.FirstOrDefault().requestScont.sum;
下面是一个工作示例:那么text
的值是多少?@trailmax我们确实在名为“text”的字符串中得到了这个值。但问题是我们无法使用parse对象从这个字符串中得到所需的值。我得到了带有无效键值的访问的JArray值:“requests/count”“.Int32数组索引应为
exception@trailmax刚刚实现的片段是一个数组并编辑了答案。