JSON 使用 c# 和 LitJson 进行解析
JSON parsing using c# and LitJson
我有一个 JSON 数据(附件)。如何使用 C# 使用 LitJSON 解析它?我在反序列化时遇到了麻烦。任何帮助,将不胜感激。
{
"vr-sessions" : {
"-KvDNAFD_BxlKEJ958eX" : {
"interview" : "Android",
"questions" : {
"-KvG7BuWu4eI52pq-6uH" : {
"playaudio" : "audio1",
"question" : "Why cannot you run standard Java bytecode on Android?"
},
"-KvG9rxQv5DWJa1EMnhi" : {
"playaudio" : "audio2",
"question" : "Where will you declare your activity so the system can access it?"
}
}
},
"-KvDNOE8YhVdgovxrzrN" : {
"interview" : "DevOps",
"questions" : {
"-KvMPd0v9BXnjYZxFm5Q" : {
"playaudio" : "audio3",
"question" : "Explain what is DevOps?"
},
"-KvMPi24OKeQTp8aJI0x" : {
"playaudio" : "audio4",
"question" : "What are the core operations of DevOps with application development and with infrastructure?"
},
"-KvMPqYxJunKp2ByLZKO" : {
"playaudio" : "audio5",
"question" : "Explain how “Infrastructure of code” is processed or executed in AWS?"
}
}
},
在添加了几个缺少的大括号并删除了最后一个逗号之后,您的 json 似乎是有效的。但是,无法在 C# 中声明 class 或以破折号开头的成员。不确定如果名称不匹配,LitJson 如何能够将 json 值映射到 C# class,除非您在使用 LitJson 解析字符串之前替换破折号。
解决方法
在您的解决方案资源管理器中右键单击 References
并执行 Add Reference
,然后从 Assemblies->Framework select System.Web.Extensions
.
string jsonString = File.ReadAllText("json.txt");
dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString);
导航到您要查找的值
string interview = json["vr-sessions"]["-KvDNAFD_BxlKEJ958eX"]["interview"];
变量 interview
获得值 "Android" 与这样做相同:
var sessions = json["vr-sessions"];
string interview = sessions["-KvDNAFD_BxlKEJ958eX"]["interview"];
如果您不知道会话名称
迭代获取问题和播放音频值。
foreach (var session in json["vr-sessions"].Values)
{
foreach (var question in session["questions"].Values)
{
Console.WriteLine(question["question"]);
Console.WriteLine(question["playaudio"]);
}
}
按位置访问元素:假设您想迭代 0..N
var sessions = new List<dynamic>(json["vr-sessions"].Values);
Console.WriteLine(sessions[0]["interview"]);
这会打印 "Android",因为位置 0 的会话的采访值是 "Android"。
我有一个 JSON 数据(附件)。如何使用 C# 使用 LitJSON 解析它?我在反序列化时遇到了麻烦。任何帮助,将不胜感激。
{
"vr-sessions" : {
"-KvDNAFD_BxlKEJ958eX" : {
"interview" : "Android",
"questions" : {
"-KvG7BuWu4eI52pq-6uH" : {
"playaudio" : "audio1",
"question" : "Why cannot you run standard Java bytecode on Android?"
},
"-KvG9rxQv5DWJa1EMnhi" : {
"playaudio" : "audio2",
"question" : "Where will you declare your activity so the system can access it?"
}
}
},
"-KvDNOE8YhVdgovxrzrN" : {
"interview" : "DevOps",
"questions" : {
"-KvMPd0v9BXnjYZxFm5Q" : {
"playaudio" : "audio3",
"question" : "Explain what is DevOps?"
},
"-KvMPi24OKeQTp8aJI0x" : {
"playaudio" : "audio4",
"question" : "What are the core operations of DevOps with application development and with infrastructure?"
},
"-KvMPqYxJunKp2ByLZKO" : {
"playaudio" : "audio5",
"question" : "Explain how “Infrastructure of code” is processed or executed in AWS?"
}
}
},
在添加了几个缺少的大括号并删除了最后一个逗号之后,您的 json 似乎是有效的。但是,无法在 C# 中声明 class 或以破折号开头的成员。不确定如果名称不匹配,LitJson 如何能够将 json 值映射到 C# class,除非您在使用 LitJson 解析字符串之前替换破折号。
解决方法
在您的解决方案资源管理器中右键单击 References
并执行 Add Reference
,然后从 Assemblies->Framework select System.Web.Extensions
.
string jsonString = File.ReadAllText("json.txt");
dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString);
导航到您要查找的值
string interview = json["vr-sessions"]["-KvDNAFD_BxlKEJ958eX"]["interview"];
变量 interview
获得值 "Android" 与这样做相同:
var sessions = json["vr-sessions"];
string interview = sessions["-KvDNAFD_BxlKEJ958eX"]["interview"];
如果您不知道会话名称
迭代获取问题和播放音频值。
foreach (var session in json["vr-sessions"].Values)
{
foreach (var question in session["questions"].Values)
{
Console.WriteLine(question["question"]);
Console.WriteLine(question["playaudio"]);
}
}
按位置访问元素:假设您想迭代 0..N
var sessions = new List<dynamic>(json["vr-sessions"].Values);
Console.WriteLine(sessions[0]["interview"]);
这会打印 "Android",因为位置 0 的会话的采访值是 "Android"。