0

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; }
    }

後で「station2」と「station3」についても同じテキストのフェッチが必要になるため、それらを残しました。

現在、これを回線で実行すると、次のエラーが発生します。

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

InvalidCastExceptionはユーザーコードによって処理されませんでしたタイプ「System.InvalidCastException」の例外がAPP.DLLで発生しましたが、ユーザーコードでは処理されませんでしたタイプ「RootObject」のオブジェクトをタイプ「station1」にキャストできません。

私はjson2csharpジェネレーターを使用して上記を作成したので、何が問題なのかわかりません。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

2

タイプのシリアライザーを作成しましたRootObject。したがって、の出力ReadObjectはそのタイプです。正しくキャストするだけです(の一般的なオーバーロードはありませんReadObject):

var root = (RootObject)serializer.ReadObject(eargs.Result);
var songHistory = root.station1;
于 2013-01-03T08:50:43.993 に答える
0

メソッドは、逆シリアル化のパラメーターとしてTypeを取得する必要もありませんか?

var songHistory = (station1)serializer.ReadObject(eargs.Result, typeof(station1));

または、逆シリアル化を実行してTを直接返す一般的なオーバーロードがあるのでしょうか。

var songHistory = serializer.ReadObject<station1>(eargs.Result);
于 2013-01-03T08:39:38.000 に答える