Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# 无法强制转换类型为';X';输入';X';_C#_Json_Windows Phone 7_Parsing_Windows Phone 8 - Fatal编程技术网

C# 无法强制转换类型为';X';输入';X';

C# 无法强制转换类型为';X';输入';X';,c#,json,windows-phone-7,parsing,windows-phone-8,C#,Json,Windows Phone 7,Parsing,Windows Phone 8,我正在尝试解析Windows Phone应用程序的JSON文件,当前代码为: private void Button1_Tap(object sender, System.Windows.Input.GestureEventArgs e) { Button1.FontSize = 15; Button1.Content = "Fetching..."; var client = new WebClient(); clien

我正在尝试解析Windows Phone应用程序的JSON文件,当前代码为:

 private void Button1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        Button1.FontSize = 15;
        Button1.Content = "Fetching...";
        var client = new WebClient();
        client.OpenReadCompleted +=
            (s, eargs) =>
            {
                var serializer = new DataContractJsonSerializer(typeof(RootObject));
                if (eargs.Error != null)
                {
                    if (eargs.Error.Message.Contains("NotFound"))
                    {
                        MessageBox.Show("Could not retrieve playlist", "Error", MessageBoxButton.OK);
                        Button1.Content = "Could not retrieve playlist";
                    }
                    else
                    {
                        MessageBox.Show("Could not retrieve playlist", "Error", MessageBoxButton.OK);
                        Button1.Content = "Could not retrieve playlist";
                    }
                }
                else
                {
                    var songHistory = (station1)serializer.ReadObject(eargs.Result);
                    Button1.Content = songHistory.text;
                }
            };
        var uri = new Uri("<JSONGOESHERE>");
        client.OpenReadAsync(uri);
    }

    public class station1
    {
        public string station { get; set; }
        public string title { get; set; }
        public string artist { get; set; }
        public string text { get; set; }
    }

    public class station2
    {
        public string station { get; set; }
        public int listeners { get; set; }
        public string title { get; set; }
        public string artist { get; set; }
        public string text { get; set; }
    }

    public class station3
    {
        public string station { get; set; }
        public int listeners { get; set; }
        public string title { get; set; }
        public string artist { get; set; }
        public string text { get; set; }
    }

    public class RootObject
    {
        public station1 station1 { get; set; }
        public station2 station2 { get; set; }
        public station3 station3 { get; set; }
    }
用户代码未处理InvalidCastException APP.DLL中发生“System.InvalidCastException”类型的异常,但未在用户代码中处理 无法将“RootObject”类型的对象强制转换为“station1”类型

我使用了json2csharp生成器来创建上述内容,所以我不确定出了什么问题


任何帮助都会很棒。

您确定该方法不必将类型作为反序列化的参数吗

var songHistory = (station1)serializer.ReadObject(eargs.Result, typeof(station1));
或者它有一个泛型重载,可以进行反序列化并直接返回一个T

var songHistory = serializer.ReadObject<station1>(eargs.Result);
var songHistory=serializer.ReadObject(eargs.Result);

您为类型
RootObject
创建了一个序列化程序。因此,
ReadObject
的输出就是这种类型。只需正确地强制转换它(对于
ReadObject
,没有通用重载):


lunaradio
还是
station1
?什么是
LunaRootObject
vs
RootObject
?您的问题不一致…在问题中出错,它是
station1
RootObject
。问题编辑。对不起,谢谢!您为
RootObject
创建了一个序列化程序。为什么期望
ReadObject
的输出类型为
station1
?它的类型是异常状态下的
RootObject
。啊,这看起来比我的更正确。使用这个,我得到了一个NullReferenceException。似乎
root
songHistory
仍然为空。“有什么想法吗?”计算机之王:这没道理。如果
ReadObject
返回空值,则转换到station1将成功,并且您将在代码中看到这一点。可能回调被多次调用。进行一次空检查,看看会发生什么。终于有时间再看一看,我被告知“DataContractJsonSerializer无法将json对象中的属性“1”与
RootObject
类上的属性
station1
匹配。”。我的JSON文件在这里:,不确定下一步要做什么。@在计算机上,您的JSON似乎与您定义的类不对应,但我不知道它们应该是什么样子。你可能应该问另一个问题。好的,我猜这个问题已经被回答了。是时候再来一次了。谢谢
var songHistory = serializer.ReadObject<station1>(eargs.Result);
var root = (RootObject)serializer.ReadObject(eargs.Result);
var songHistory = root.station1;