C# 如何在C中将嵌套的json字符串转换为可访问的结构,以便打印选择项?
我应该使用哪个过程和数据结构来访问C中嵌套JSON字符串中的所有键值对 下图是我正在使用的JSON字符串的一部分。如您所见,它是嵌套的。我正在使用C-Sharp C从每个块中检索日期和消息,并使用它们各自的键 我试着把我的JSON字符串放到字典里C# 如何在C中将嵌套的json字符串转换为可访问的结构,以便打印选择项?,c#,json,C#,Json,我应该使用哪个过程和数据结构来访问C中嵌套JSON字符串中的所有键值对 下图是我正在使用的JSON字符串的一部分。如您所见,它是嵌套的。我正在使用C-Sharp C从每个块中检索日期和消息,并使用它们各自的键 我试着把我的JSON字符串放到字典里 private static async Task<String> ProcessRepo() { var stringTask = APIclient.GetStringAsync("https://a.RESTapi.
private static async Task<String> ProcessRepo()
{
var stringTask = APIclient.GetStringAsync("https://a.RESTapi.fakecom");
var x = await stringTask;
Dictionary<string, object> data = JsonConvert.DeserializeObject<Dictionary<string, object>>(x);
return data;
}
这给了我两个键值对。一个是pagelen,值为30,另一个是值,值为一个长字符串中后面的所有内容。不是很有用
这是我第一次使用C。请给我指出正确的方向。我花了很多时间寻找一些有用的东西
反序列化的问题是,您试图将完整的JSON反序列化为键值对字典,但JSON不是这样的,这就是您无法按预期访问值的原因 解决这个问题的两种方法 方法1: 这将以非结构化的方式反序列化完整的json,您将获得每个嵌套json的键和值 方法2: 创建一个与JSON具有相同结构的类
public class MyJson
{
[JsonProperty("pageLen")]
public int PageLen { get; set; }
[JsonProperty("values")]
public Values Values { get; set; }
}
public class Values
{
[JsonProperty("rendered")]
public Rendered Rendered { get; set; }
[JsonProperty("hash")]
public string Hash { get; set; }
}
public class Rendered
{
}
然后将其作为反序列化类传递,如下所示
private static async Task<String> ProcessRepo()
{
MyJson data = JsonConvert.DeserializeObject<MyJson>(x);
}
明确的解决方案取决于您的目标,但最简单的方法是:
var obj = JsonConvert.DeserializeObject(json);
foreach (var jo in (JArray)((JObject)obj)["values"])
{
Console.WriteLine($"{jo["message"]}, {jo["date"]}");
}
您可以将JSON粘贴到VisualStudio中,它将创建与JSON的布局和数据类型匹配的类。使用Edit->Paste Special->Paste JSON,因为类在反序列化语句中使用它来代替对象。虽然我不确定基于片段的词典是否理想,但我没有Visual Studio。我在运行Linux。我有权访问Visual Studio代码。它有这个功能吗?您也可以使用json2csharp.com根据JSONI获取类如果您想为JSON字符串自动生成类,请参阅。要将JSON加载到没有固定模式的文档对象模型中,请使用JToken.Parse或JObject.Parse,如至中所示。
var obj = JsonConvert.DeserializeObject(json);
foreach (var jo in (JArray)((JObject)obj)["values"])
{
Console.WriteLine($"{jo["message"]}, {jo["date"]}");
}