2

Windows 8 アプリ用に C# でオブジェクトをシリアル化および逆シリアル化しています。

オブジェクトを渡すと例外がスローされるため、オブジェクトを次のビューに渡す前にシリアル化しています。

関数 OnNavigatedTo:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   base.OnNavigatedTo(e);
   string XMLString = e.Parameter.ToString();
   var thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));
 ....}

逆シリアル化機能:

  public static Channel XmlDeserializeFromString<Channel>(string objectData)
    {
        return (Channel)XmlDeserializeFromString(objectData, typeof(Channel));
    }

    public static object XmlDeserializeFromString(string objectData, Type type)
    {
        var serializer = new XmlSerializer(type);
        object result;

        using (TextReader reader = new StringReader(objectData))
        {
            result = serializer.Deserialize(reader);
        }

        return result;
    }

オブジェクトの内容

このオブジェクトのデータにアクセスしたいのですが、thisChannel.Name のようなものが機能しません。そして、このオブジェクトで作業を続ける方法がわかりません。

4

4 に答える 4

2

var次の行にドロップすることから始めます。

 //var thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));
 Channel thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));

object XmlDeserializeFromString()間違ったものを選択すると、少なくともエラーが発生します。

そして、正しいものを使用していることを確認してください:

 Channel thisChannel = XmlDeserializeFromString<Channel>(XMLString);

オーバーロードは注意して使用する必要があり、通常は Type パラメーターと混合しないでください。

于 2013-08-26T13:09:22.420 に答える
1

XmlDeserializeFromStringobjectプロパティを持たない を返しNameます。次のいずれかを行う必要があります。

  1. 使用したいタイプにキャストします
  2. それを行う追加した汎用メソッドを使用します。

    var thisChannel = XmlDeserializeFromString<Channel>(XMLString);`
    
  3. dynamic実行時にメソッド名を解決するために使用します
  4. リフレクションを使用してName実行時にプロパティを見つける
于 2013-08-26T13:08:31.927 に答える
0

はい JSON > XML。XML に固執したい場合は、TCD.Serializationを使用します。これは、ストリームと文字列との間で XML および JSON のシリアル化および逆シリアル化を提供します。

.

于 2013-08-26T13:25:54.237 に答える