2017-01-13 3 views
0

alle! Ich bin neu in Xamarin. Ich habe diese JSON-Datei ...Xamarin - JSON-Datei lesen und die Werte lesen

{ 
"debug":true, 
"sequence":[ 
    "p1" 
], 
"pages":[ 
    { 
    "pageId":"p1", 
    "type":"seq", 
    "elements":[ 
     { 
      "type":"smallVideo", 
      "width":300, 
      "height":300, 
      "top":0, 
      "left":0, 
      "file":"xxx.mp4" 
     } 
    ] 
    } 
], 
"index":[ 
    { 
    "width":300, 
    "height":300, 
    "top":0, 
    "left":0, 
    "goTo":"p1" 
    } 
] 
} 

Und das ist mein einfacher Code ...

using Newtonsoft.Json; 

JObject elements = JObject.Parse(File.ReadAllText("elements.json")); 
Console.WriteLine(elements); 

Ok, kann ich auf meinem Ausgabebildschirm der ganze JSON-Datei. Feine ... Aber ich möchte einen Wert lesen, wie Javascript, Beispiele ...

elements.debug (true)

elements.pages [0] .pageId

So, Ich muss Werte abrufen, die auf dem Schlüssel/Pfad basieren, wie es in Javascript üblich ist. Irgendeine Ahnung ?

ty!

Antwort

2

C# ist ein wenig von js anders, hier Sie müssen Objekte deklarieren. In Ihrem Fall müssen Sie neue Klasse erstellen genannt ElementsObj und Ihr Objekt würde diese Klasse Instanz sein:

public class ElementsObj 
{ 
    public bool debug { get; set; } 
    public List<string> sequence { get; set; } 
    public List<Page> pages { get; set; } 
    public List<Index> index { get; set; } 
} 

public class Element 
{ 
    public string type { get; set; } 
    public int width { get; set; } 
    public int height { get; set; } 
    public int top { get; set; } 
    public int left { get; set; } 
    public string file { get; set; } 
} 

public class Page 
{ 
    public string pageId { get; set; } 
    public string type { get; set; } 
    public List<Element> elements { get; set; } 
} 

public class Index 
{ 
    public int width { get; set; } 
    public int height { get; set; } 
    public int top { get; set; } 
    public int left { get; set; } 
    public string goTo { get; set; } 
} 

Künftig Verwendung http://json2csharp.com/ Klassen von JSON-Datei zu erzeugen.

Später können Sie Ihr JSON für dieses Objekt deserialisieren. Ich würde Newtonsoft lib empfehlen, dies zu tun:

ElementsObj tmp = JsonConvert.DeserializeObject<ElementsObj>(jsonString); 
+0

Mist! Ich habe mich über etwas wie deine Lösung gewundert, aber ich bin hart mit mir selbst: Neeeeeeeeeeeeeeeeeeeeeeeeeeee! PLZ !!! Es ist wahrscheinlich eine einfache Möglichkeit, dies zu archivieren !!!! Aber es ist okay ! Tyvm, Zaven! –

0

1) Option eine object erstellen, die Ihre JSON Struktur widerspiegelt:

public class Element 
{ 
    public string type { get; set; } 
    public int width { get; set; } 
    public int height { get; set; } 
    public int top { get; set; } 
    public int left { get; set; } 
    public string file { get; set; } 
} 

public class Page 
{ 
    public string pageId { get; set; } 
    public string type { get; set; } 
    public List<Element> elements { get; set; } 
} 

public class Index 
{ 
    public int width { get; set; } 
    public int height { get; set; } 
    public int top { get; set; } 
    public int left { get; set; } 
    public string goTo { get; set; } 
} 

public class MyObject 
{ 
    public bool debug { get; set; } 
    public List<string> sequence { get; set; } 
    public List<Page> pages { get; set; } 
    public List<Index> index { get; set; } 
} 

MyObject parsed = JsonConvert.DeserializeObject<MyObject>(File.ReadAllText("elements.json")); 

var debug = parsed.debug; 

2) Optiondynamic

dynamic results = JsonConvert.DeserializeObject<dynamic>(File.ReadAllText("elements.json")); 

var debug = dynamic.debug;