2017-10-15 31 views
1

我有一个JSON数据(附加文件)。我如何使用C#使用LitJSON解析它?我在反序列化方面遇到麻烦。任何帮助,将不胜感激。使用c#和LitJson解析JSON

{ 
"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?" 
    } 
    } 
}, 
+0

你的json似乎不是有效的。提供有效的json。 – Shaw

+0

@shaw看起来他只是复制了json字符串的前两个对象。 – vipersassassin

+2

你有没有试过*用LitJson解析它?发生了什么?请提供一个[mcve],显示你有多远,发生了什么。 –

回答

2

添加一对缺失的大括号和删除最后一个逗号后,你的json似乎是有效的。然而,没有办法在C#中用短划线来声明类或成员。不知道如果名称不匹配,LitJson如何能够将Json值映射到C#类,除非在用LitJson解析字符串之前替换破折号。

解决方法

在您的Solution Explorer中右键单击ReferencesAdd Reference,然后从组件 - >框架选择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"]; 

如果您不知道会话名称

迭代获取问题和playaudio值。

foreach (var session in json["vr-sessions"].Values) 
{ 
    foreach (var question in session["questions"].Values) 
    { 
     Console.WriteLine(question["question"]); 
     Console.WriteLine(question["playaudio"]); 
    } 
} 

获得通过位置的元素:假设你想在位置0迭代0..N

var sessions = new List<dynamic>(json["vr-sessions"].Values); 
Console.WriteLine(sessions[0]["interview"]); 

这种打印的“Android”作为采访会议的价值是“机器人” 。

+0

感谢您的代码。但是我不知道“-KvDNAFD_BxlKEJ958eX”。在这种情况下,我可以如何访问“playaudio”或“question”? –

+0

如果您不知道会话名称,唯一的办法就是使用类似上面的动态对象。我已经更新了我的答案,以向您展示如何迭代并获取这些值,而忽略会话名称。 – derloopkat