【问题标题】:Convert android json parsing in c#在c#中转换android json解析
【发布时间】:2014-08-07 14:47:20
【问题描述】:

我正在尝试将一个 android 应用程序移植到 windows phone 应用程序中,并且我坚持执行 json 解析任务。谁能指导我如何在 c# 中实现。

JSON

{
  "chapter1": {
    "name": "Successful Sales",
    "page1": {
      "url": "Chapter-304/Page-1.html"
    },
    "page2": {
      "url": "Chapter-304/Page-2.html"
    },
    "page3": {
      "url": "Chapter-304/Page-3.html"
    },
    "page4": {
      "url": "Chapter-304/Page-4.html"
    },
    "page5": {
      "url": "Chapter-304/Page-5.html"
    },
    "page6": {
      "url": "Chapter-304/Page-6.html"
    },
    "page7": {
      "url": "Chapter-304/Page-7.html"
    },
    "page8": {
      "url": "Chapter-304/Page-8.html"
    },
    "page9": {
      "url": "Chapter-304/Page-9.html"
    },
    "page10": {
      "url": "Chapter-304/Page-10.html"
    }
  }
}

安卓代码

    JSONObject jsonObject = (JSONObject) new JSONTokener(courselist).nextValue();  
    /*courselist - nothing but json string*/
    int jsonLength = jsonObject.length();
    JSONObject[] subJson = new JSONObject[jsonLength];
    String[] courseString = new String[jsonLength];
    Vector<Object> mVectorElements = new Vector<Object>();

    for (int i = 0; i < jsonLength; i++) {
        try {
            subJson[i] = jsonObject.getJSONObject(jsonObject.names()
                    .getString(i));
            courseString[i] = jsonObject.names().getString(i) + "@@@@"
                    + subJson[i].getString("name");

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    Arrays.sort(courseString);

    for (int j = 0; j < courseString.length; j++) {
        mVectorElements.add(courseString[j].split("@@@@")[1]);
    }

我正在尝试使用 Newtonsoft.Json.Linq.JToken 解析,但解析后我将如何获取每个元素。如果我使用错误的方式,请纠正我。

更新: 下面是我试图在 JObject 中获取属性名称但循环不起作用的方法。

    jsonObject = (JObject) JToken.Parse(courselist);

    foreach (JObject content in jsonObject.Children<JObject>())
    {
        foreach (JProperty prop in content.Properties())
        {
            Debug.WriteLine(prop.Name);
        }
    }

【问题讨论】:

  • 您正在向我们展示 Android 代码,但您正在询问如何在 C# 中执行此操作。请同时显示 Android 代码和 C# 代码,以便我们查看您的位置。
  • @SlashTag 确定请检查更新。

标签: c# android json windows-phone-8 windows-phone


【解决方案1】:

试试这个:

JObject jsonObject = JObject.Parse(courselist);

foreach (JProperty prop in jsonObject.Properties())
{
    Debug.WriteLine(prop.Name);  // chapter1
    Debug.WriteLine(prop.Value["name"].ToString());  // Successful Sales

    // Get page numbers and URLs
    int count = 0;
    foreach (JProperty pageProp in ((JObject)prop.Value).Properties())
    {
        if (pageProp.Name != "name")
        {
            Debug.WriteLine(pageProp.Name + ": " + 
                            pageProp.Value["url"].ToString());
            count++;
        }
    }
    Debug.WriteLine(count + " total pages.");
}

【讨论】:

  • 感谢它按预期工作。但是如果我使用 JToken 来解析,那么属性是 null,为什么会发生这种情况?
  • 我不确定我是否理解。哪个属性为空?
  • 您能否提供更多帮助,请建议我将如何获取总页面及其网址。谢谢
  • 我已经更新了我的答案以展示如何做到这一点。
【解决方案2】:

转到Json2Csharp 站点并将整个 JSON 字符串或 URL 粘贴到 JSON,然后单击生成按钮。这将为您的 JSON 响应创建所有必需的类。

对于 Json 反序列化:

Rootobject root = JsonConvert.DeserializeObject<Rootobject>(courselist);

看看这个教程:Parsing JSON in Windows Phone Apps

P.S : 它使用了另一种反序列化方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多