将Json数组解析为C#类

时间:2013-06-13 19:44:32

标签: c# json

这是我的代码:

Encoding enc = System.Text.Encoding.GetEncoding(1252);
StreamReader loResponseStream = new StreamReader(resp.GetResponseStream(), enc);
JsonSerializer serializer = new JsonSerializer();
JsonTextReader jsreader = new JsonTextReader(loResponseStream);
results = (mHealthData)serializer.Deserialize(jsreader, typeof(mHealthData)); ***
loResponseStream.Close();

public class mHealthData
{ // Class for the Mhealth Data
    public class RootObject
    {
        public string source { get; set; }
        public string name { get; set; }
        public string type { get; set; }
        public string unit { get; set; }
        public double value { get; set; }
        public string timestamp { get; set; }
    }
}   

这是我收到的错误在标有 * * 的行上:

  

无法将当前JSON数组(例如[1,2,3])反序列化为类型“MHealthPlugin.mHealthData”,因为该类型需要JSON对象(例如{“name”:“value”})才能正确反序列化。   要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),如{{1可以从JSON数组反序列化。 JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。

我不知道如何解决这个问题。我已经尝试将List<T>几乎放在代码中的任何地方,但它没有帮助。其他休息电话我做得很好。 作为参考,这里是我正在尝试解析的JSON的示例:

List<mHealthData>

1 个答案:

答案 0 :(得分:3)

除了嵌套类之外,您的mHealthData类中没有任何内容。退后一步,看看你的数据应该如何定义。

看起来你想要一个RootObject课程。在这种情况下,课程应该是:

public class RootObject
{
    public string source { get; set; }
    public string name { get; set; }
    public string type { get; set; }
    public string unit { get; set; }
    public double value { get; set; }
    public string timestamp { get; set; }
}

然后当你反序列化时,你最终会得到一个RootObject[]类型的对象 - 你的JSON只是一个数组,而不是一个包含数组的对象。