Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataContractJsonSerializer的InvalidCastException_C#_.net_Json_Windows Phone 7 - Fatal编程技术网

C# DataContractJsonSerializer的InvalidCastException

C# DataContractJsonSerializer的InvalidCastException,c#,.net,json,windows-phone-7,C#,.net,Json,Windows Phone 7,我正在尝试使用DataContractJsonSerializer阅读一些JSON,就像我通常做的那样 有效JSON如下所示: { "error": "false", "errorMsg": "Error message", "errorField": "", "time": "19:24", "times": [ [ "blank", "19:35", "London", "direct", "1",

我正在尝试使用
DataContractJsonSerializer
阅读一些JSON,就像我通常做的那样

有效JSON如下所示:

  {
"error": "false",
"errorMsg": "Error message",
"errorField": "",
"time": "19:24",
"times": [
    [
        "blank",
        "19:35",
        "London",
        "direct",
        "1",
        "new"
    ],
    [
        "blank",
        "20:07",
        "Manchester",
        "direct",
        "1",
        "old"
    ]
],
"buses": [],
"ferries": [],
"updates": []
 }
#

数据类:

 [DataContract]
public class NRResult
{
    [DataMember(Name = "times")]
    public IEnumerable<Timings> Timings{ get; set; }
}
[DataContract]

public class Timings    {
    [DataMember]
    public string unknown1 { get; set; }
    [DataMember]
    public string time { get; set; }
    [DataMember]
    public string destination { get; set; }
    [DataMember]
    public string ontime { get; set; }
    [DataMember]
    public string unknown2 { get; set; }
    [DataMember]
    public string link { get; set; }
}
[DataContract]
公开课成绩
{
[DataMember(Name=“times”)]
公共IEnumerable计时{get;set;}
}
[数据合同]
公课上课时间{
[数据成员]
公共字符串未知1{get;set;}
[数据成员]
公共字符串时间{get;set;}
[数据成员]
公共字符串目标{get;set;}
[数据成员]
时间{get;set;}上的公共字符串
[数据成员]
公共字符串未知2{get;set;}
[数据成员]
公共字符串链接{get;set;}
}
我在第行得到一个
无效的castedexception
var item=(nResult)序列化程序.ReadObject(流);

我不知道为什么?

我认为
nresult
的声明应该是这样的

[DataContract]
public class NRResult
{
    [DataMember(Name = "times")]
    public IEnumerable<string[]> Timings { get; set; }
}

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(NRResult));
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(result1)))
{
    var item = (NRResult)serializer.ReadObject(stream);
    foreach (var route in item.Timings)
    {
        var _item = new{
                Route = route[0],
                Time = route[1],
                Destination = route[2],
                AimedDepart = route[3],
                ExpectedDepart = route[4],
                OpRef = route[5]
            };

        Console.WriteLine(_item);
    }
};
[DataContract]
公开课成绩
{
[DataMember(Name=“times”)]
公共IEnumerable计时{get;set;}
}
DataContractJsonSerializer serializer=新的DataContractJsonSerializer(typeof(nResult));
使用(var stream=newmemoryStream(Encoding.UTF8.GetBytes(result1)))
{
var item=(nResult)序列化程序.ReadObject(流);
foreach(项目中的var路由计时)
{
变量_项=新{
路由=路由[0],
时间=路线[1],
目的地=路线[2],
AimedDepart=路线[3],
ExpectedDepart=路线[4],
OpRef=路线[5]
};
控制台写入线(_项);
}
};

确保TFLBUSE和NRResult有一个没有参数的公共构造函数。很抱歉,TFLBUSE应该是“计时”。改变了。是的,就是这样。我看到这个JSON的格式与我以前使用的其他JSON不同,所以我不需要设置类中每个字段的名称,因为您已经将它们去掉了。
[DataContract]
public class NRResult
{
    [DataMember(Name = "times")]
    public IEnumerable<string[]> Timings { get; set; }
}

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(NRResult));
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(result1)))
{
    var item = (NRResult)serializer.ReadObject(stream);
    foreach (var route in item.Timings)
    {
        var _item = new{
                Route = route[0],
                Time = route[1],
                Destination = route[2],
                AimedDepart = route[3],
                ExpectedDepart = route[4],
                OpRef = route[5]
            };

        Console.WriteLine(_item);
    }
};