2017-10-15 6 views
1

私はJSONデータ(添付ファイル)を持っています。 LitJSONを使ってC#でどのように解析できますか?私はそれをdeserialisingに苦労している。どんな助けもありがとう。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?" 
    } 
    } 
}, 
+0

あなたのjsonは有効ではないようです。有効なjsonを指定します。 – Shaw

+0

@shaw彼はjson文字列の最初の2つのオブジェクトだけをコピーしているように見えます。 – vipersassassin

+2

LitJsonで解析しようとしましたか?何が起こった?あなたがどれだけ遠くにいるのか、何が起こったのかを示す[mcve]を入力してください。 –

答えて

2

欠けているカッコを追加して最後のカンマを削除した後、あなたのjsonが有効であるようです。しかし、C#でダッシュで始まるクラスやメンバーを宣言する方法はありません。 LitJsonで文字列を解析する前にダッシュを置き換えない限り、名前が一致しない場合、LitJsonがjson値をC#クラスにどのようにマップできるかはわかりません。右Assemblies->フレームワークから、その後、Referencesをクリックして、Add Referenceを行い、あなたのソリューションエクスプローラで

回避策

System.Web.Extensionsを選択します。あなたの場合は

var sessions = json["vr-sessions"]; 
string interview = sessions["-KvDNAFD_BxlKEJ958eX"]["interview"]; 

string jsonString = File.ReadAllText("json.txt"); 
dynamic json = new JavaScriptSerializer().Deserialize<dynamic>(jsonString); 

移動値にあなたが

string interview = json["vr-sessions"]["-KvDNAFD_BxlKEJ958eX"]["interview"]; 

変数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..N

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

位置0でのセッションのための面接の値が「アンドロイド」であるとして、これが「アンドロイド」プリントを反復処理したいとしましょう。

+0

ありがとうございます。しかし、私は "-KvDNAFD_BxlKEJ958eX"を事前に知らない。このようなシナリオでは、 "playaudio"や "question"にどうやってアクセスできますか? –

+0

セッションの名前がわからない場合は、上記のような動的オブジェクトを使用するしかありません。セッション名を無視して、それらの値を反復して取得する方法を示すために私の答えを更新しました。 – derloopkat