C#JSon Parser错误

时间:2015-10-24 19:21:38

标签: c# json

这是读取Json文件代码部分。

           using (StreamReader streamReader = new StreamReader(tplFile, Encoding.GetEncoding("GB2312")))
            {
                try
                {
                    new JsonSerializer();
                    JsonTextReader reader = new JsonTextReader(streamReader);
                    JObject jObject = JObject.Load(reader);
                    JToken jToken = jObject["general"];
                    foreach (JToken current in (IEnumerable<JToken>)jToken)
                    {
                        PrintItem item = default(PrintItem);
                        string text = current.ToString();
                        if (text.Contains("arryname"))
                        {
                            string text2 = current["arryname"].ToString();
                            item.arryName = text2;
                            JToken jToken2 = current["value"];
                            using (IEnumerator<JToken> enumerator2 = ((IEnumerable<JToken>)jToken2).GetEnumerator())
                            {
                                while (enumerator2.MoveNext())
                                {
                                    JToken current2 = enumerator2.Current;
                                    PrintItem item2 = default(PrintItem);
                                    string text3 = current2.ToString();
                                    if (text3.Contains("size"))
                                    {
                                        item2.size = Common.Convert2Int(current2["size"].ToString());
                                    }
                                    if (text3.Contains("format"))
                                    {
                                        item2.format = current2["format"].ToString();
                                    }
                                    if (text3.Contains("value"))
                                    {
                                        item2.value = current2["value"].ToString();
                                    }
                                    if (text3.Contains("align"))
                                    {
                                        item2.align = Common.Convert2Int(current2["align"].ToString());
                                    }
                                    if (text3.Contains("style"))
                                    {
                                        item2.style = Common.Convert2Int(current2["style"].ToString());
                                    }
                                    if (text3.Contains("left"))
                                    {
                                        item2.left = Common.Convert2Int(current2["left"].ToString());
                                    }
                                    if (text2 == "items")
                                    {
                                        this.gtempItemList.arryname.Add(item2);
                                    }
                                    else
                                    {
                                        if (text2 == "pays")
                                        {
                                            this.gtempItemList.pays.Add(item2);
                                        }
                                    }
                                }
                                goto IL_376;
                            }
                            goto IL_27E;
                        }
                        goto IL_27E;
                    IL_376:
                        this.gtempItemList.ItemList.Add(item);
                        continue;
                    IL_27E:
                        if (text.Contains("size"))
                        {
                            item.size = Common.Convert2Int(current["size"].ToString());
                        }
                        if (text.Contains("format"))
                        {
                            item.format = current["format"].ToString();
                        }
                        if (text.Contains("value"))
                        {
                            item.value = current["value"].ToString();
                        }
                        if (text.Contains("align"))
                        {
                            item.align = Common.Convert2Int(current["align"].ToString());
                        }
                        if (text.Contains("style"))
                        {
                            item.style = Common.Convert2Int(current["style"].ToString());
                        }
                        if (text.Contains("left"))
                        {
                            item.left = Common.Convert2Int(current["left"].ToString());
                            goto IL_376;
                        }
                        goto IL_376;
                    }
                }
            }
            this.Refresh();
        }

    }

这是我的代码。

并且

{
    "general": {
        "arryname": "name1",
        "value": {
            "size": "10",
            "format": "L100"
        }
    }
}

这是我的JSon文件。

当代码string text2 = current["arryname"].ToString();正在运行时,错误

  

无法访问Newtonsoft.Json.Linq.JProperty上的子值。

发生。

我找不到理由。

3 个答案:

答案 0 :(得分:1)

尝试将其转换为JToken而不是foreach (JProperty current in jToken.OfType<JProperty>()) { PrintItem item = default(PrintItem); string text = current.Name; if (text.Contains("arryname")) { string text2 = current.Value.ToString(); ,然后使用其名称和值属性:

{{1}}

答案 1 :(得分:1)

您应该使用数组更改json文件。 数组键是[]。

答案 2 :(得分:0)

我按如下方式更改了Json文件。

{
"general": [
    {"arryname": "items", "value": [ 
        {"size": "2", "format": "L100", "value": "value", "align": 0, "style": "0", "left":"1"},
        {"size": "3", "format": "L100", "value": "value", "align": 1, "style": "1", "left":"1"},
        {"size": "4", "format": "L100", "value": "value", "align": 2, "style": "2", "left":"1"},]
    },
    {"arryname": "pays", "value": [ 
        {"size": "2", "format": "L100", "value": "value", "align": 0, "style": "0", "left":"1"}]
    }]
}
}

current [“arryname”]需要数组。但在Json文件中,只有值不是数组。

所以我把Json改成了数组。