我是C#的新手。我使用newtonsoft解析了以下JSON:
{"Results":{"output1":{"type":"table","value":{"ColumnNames":["Purchased Bike","Scored Labels"],"ColumnTypes":["String","Double"],"Values":[["value","0.55503808930127"]]}}}}
我要提取值0.555 ...,它在“值”级别下。我正在考虑将此JSON转换为列表,然后提取该元素的最后一个元素:
var pred = results["Results"]["output1"]["value"]["Values"].ToObject<List<"Values">>();
但是List
被突出显示为不合适。请注意,results
的类型为Newtonsoft.Json.Linq.JObject
。
如果我尝试:
var pred = results["Results"]["output1"]["value"]["Values"].ToObject<List<Values>>();
不带引号,“值”突出显示为未找到的类型或名称空间。
如何将JSON的“值”级别转换为列表,然后提取最后一项?
答案 0 :(得分:3)
使用VS 2019 粘贴JSON作为类功能,您可以轻松创建一组与JSON匹配的类:
然后,您可以将其用作Model类进行解析,而不必处理JObject或JArray(您想对它进行更多的操作会带来更多的不便)。
工作演示:请参见.NET Fiddle-> https://dotnetfiddle.net/o5fIH5
小提琴的代码:
using System;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
var json = "{\"Results\":{\"output1\":{\"type\":\"table\",\"value\":{\"ColumnNames\":[\"Purchased Bike\",\"Scored Labels\"],\"ColumnTypes\":[\"String\",\"Double\"],\"Values\":[[\"value\",\"0.55503808930127\"]]}}}}";
var parsed = JsonConvert.DeserializeObject<Rootobject>(json);
foreach (var array in parsed.Results.output1.value.Values)
foreach (var entry in array)
Console.WriteLine(entry);
Console.WriteLine("\r\nItem Value: " + parsed.Results.output1.value.Values[0][1]);
}
}
// Generated classes:
public class Rootobject
{
public Results Results { get; set; }
}
public class Results
{
public Output1 output1 { get; set; }
}
public class Output1
{
public string type { get; set; }
public Value value { get; set; }
}
public class Value
{
public string[] ColumnNames { get; set; }
public string[] ColumnTypes { get; set; }
public string[][] Values { get; set; }
}