这是读取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上的子值。
发生。
我找不到理由。
答案 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改成了数组。