循环遍历.json文件中的每个项目

时间:2015-01-03 22:05:38

标签: c# wpf

我有.Json文件,我想遍历其中的每个项目并为每个变量分配适当的值,我得到例外说法:

  

无法反序列化当前的JSON对象(例如{“name”:“value”})   进入类型   'System.Collections.Generic.List`1 [WpfApplication1.MainWindow + MyItem]'   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。

我错过了什么吗?

这是我到目前为止所做的:

    private void ReadFromJson()
    {
        string PinH, PinL;

        StreamReader r = new StreamReader(@"C:\Users\Badre\Desktop\Spec.json");
        string json = r.ReadToEnd();

        List<Spec> _spec = (List<Spec>)Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(List<Spec>));

        foreach (var item in _spec)
        {
            PinH = item.PinHigh;
            PinL = item.PinLow;
        }
    }

这是Spec类:

public class Spec
    {
        public string PinHigh {get; set;}
        public string PinLow { get; set; }
    }

最后是我的JSON文件:

{

    "ResistanceR10":
        {
            "PinHigh": "XCI2_14",
            "PinLow": "XCBB1_2"
        },

    "ResistanceR22":
        {
            "PinHigh": "XCI47",
            "PinLow": "XCBB18"
        },

    "DiodeV18":
        {
            "PinHigh": "XCI47",
            "PinLow": "XCBB18"
        },
    "CapacitanceC1":
        {
            "PinHigh": "XCI47",
            "PinLow": "XCBB18"
        }
}

2 个答案:

答案 0 :(得分:3)

您的JSON不是列表,它是具有对象属性的对象。例如,此类型看起来更像您的JSON:

public class TestClass{

  public Spec ResistanceR10 { get; set; }
  public Spec ResistanceR22 { get; set; }

  ...
}

这就是你如何反序列化这个:

TestClass _spec = (TestClass)Newtonsoft.Json.JsonConvert.DeserializeObject(json,  typeof(TestClass));

答案 1 :(得分:1)

我遇到了同样的问题。但不是使用@T McKeown的TestClass 我建议另一个解决方案。

var _spec = JsonConvert.DeserializeObject<Dictionary<string, Spec>>(json);

使用foreach循环或其他循环,您现在可以使用包含所有值的字典

foreach (var item in _spec)
{
    PinH = item.Value.PinHigh;
    PinL = item.Value.PinLow;
}