如何解决如何在C#中解析此JSON数据,简单切换到javascript会更有益吗?
我正在寻找解析此JSON的方法,但除了问题之外,我什么都没有。 JSON的链接为here。我正在尝试访问“ href”字段。在撰写本文时,我意识到数据字段实际上是一个数组,所以这是我的问题的一部分。
class Program
{
static void Main(string[] args)
{
var json = System.IO.File.ReadAllText(@"C:\Users\...\file.json");
Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(json);
var x = myDeserializedClass.result.extractorData.data;
Console.Write(x.ToString());
}
public class Newcolumn
{
public string text { get; set; }
public string xpath { get; set; }
public string href { get; set; }
public string filepath { get; set; }
public string fileMimeType { get; set; }
public int fileTotalBytes { get; set; }
public string fileLastModifiedTime { get; set; }
}
public class Group
{
public List<Newcolumn> Newcolumn { get; set; }
}
public class Datum
{
public List<Group> group { get; set; }
}
public class ExtractorData
{
public string url { get; set; }
public List<Datum> data { get; set; }
}
public class PageData
{
public int statusCode { get; set; }
public long timestamp { get; set; }
}
public class Inputs
{
public string _url { get; set; }
}
public class Result
{
public ExtractorData extractorData { get; set; }
public PageData pageData { get; set; }
public Inputs inputs { get; set; }
public string taskId { get; set; }
public long timestamp { get; set; }
public int sequenceNumber { get; set; }
}
public class Root
{
public string url { get; set; }
public Result result { get; set; }
}
}
This ends up returning: System.Collections.Generic.List`1[ConsoleApp3.Datum]
我注意到,尽管我不确定如何构造字段名称数据,但实际上它变成了一个数组。 data。[0] .new Column。[0] .group.etc ...显然不起作用。 “新列”字段中的空间也是有问题的。此外,当我调试并查看JSON查看器时,“新列字段为null。我也尝试了以下代码:
public static void Main()
{
var json = System.IO.File.ReadAllText(@"C:\Users\...\file.json");
dynamic stuff = JsonConvert.DeserializeObject(json);
var a = stuff.result.extractorData.data;
string b = a.ToString();
Console.WriteLine(b);
Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
这实际上确实返回了数据字段对象,但是,如果我这样做的话,则为:stuff.result.extractorData.data.group;我明白了:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
HResult=0x80131500
Message='Newtonsoft.Json.Linq.JArray' does not contain a definition for 'group'
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
我认为这可能是由于数据字段中包含的数组所致,无论由于空间原因,“新列”字段也是此方法的问题。
解决方法
在您上面的代码中
public class ExtractorData
{
public string url { get; set; }
public List<Datum> data { get; set; }
}
其中数据为列表,而您尝试以字符串形式访问
Console.Write(x.ToString());
数据变量Datum中的是列表(其中变量具有多个数据),并且每个元素中都有一个列表。 (此JSON中应用了嵌套列表概念)
尝试在下面的行上添加断点,并逐行检查代码执行。
var a = stuff.result.extractorData.data;
查看JSON文件图像后,请尝试以下代码
Console.Write(a.FirstOrDefault()?.group.FirstOrDefault()?.Newcolumn.FirstOrDefault()?.href);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。