3

这是我的代码:

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)List<T>,例如从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。

我不知道如何解决这个问题。我已经尝试List<mHealthData>在代码中几乎无处不在,但没有帮助。其他的电话我做的很好。作为参考,这是我尝试解析的 JSON 的示例:

[{"source":"hi","name":"G","type":"number","unit":null,"value":126,"timestamp":"1974-07-27T09:35:12Z"},{"source":"hi","name":"G","type":"number","unit":null,"value":120,"timestamp":"1974-07-27T09:35:12Z"}]
4

1 回答 1

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 只是一个数组,而不是一个包含数组的对象。

于 2013-06-13T19:51:07.903 回答