Xamarin - 读取JSON文件并读取值

时间:2017-01-13 20:33:45

标签: xamarin xamarin.ios json.net

大家好!我是Xamarin的新手。我有这个json文件......

{
"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"
  }
]
}

这是我的简单代码......

using Newtonsoft.Json;

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

好的,我可以在输出屏幕上看到整个JSON文件。精细... 但我想阅读任何价值,就像javascript,例子......

elements.debug(true)

elements.pages [0] .pageId

所以,我需要像Javascript中常用的那样,根据键/路径检索值。任何线索?

ty!

2 个答案:

答案 0 :(得分:2)

C#与js略有不同,这里需要声明对象。 在您的情况下,您需要创建名为ElementsObj的新类,您的对象将是此类实例:

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; }
}

将来使用http://json2csharp.com/从JSON文件生成类。

稍后您可以将JSON反序列化为此对象。 我建议使用Newtonsoft lib来执行此操作:

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

答案 1 :(得分:0)

1)选项创建一个反映您的JSON结构的object

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)选项使用dynamic

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

var debug = dynamic.debug;