3

アプリの特定のページが墓石から復元されないという問題が発生しました。アプリにアクセスしようとすると、ホーム画面に戻されます。

デバッグ中に3行がコンソールに記録されました。

  • タイプの最初のチャンスの例外がSystem.Runtime.Serialization.InvalidDataContractException発生しましたSystem.Runtime.Serialization.dll
  • タイプの最初のチャンスの例外がSystem.Reflection.TargetInvocationException発生しましたmscorlib.dll
  • タイプの最初のチャンスの例外がSystem.Runtime.Serialization.InvalidDataContractException発生しましたSystem.Runtime.Serialization.dll

e.ExceptionObject.Message.ToString()次に、このエラーを調べて確認しました。

"Type 'Newtonsoft.Json.Linq.JToken' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute."

私はそのページのcsコードでいくつかJObjectsを使用しています。JTokens私は特にリストボックスのバインディング値をそれらからの値に設定していますJObjects

<ListBox x:Name="list" Height="600" HorizontalContentAlignment="Stretch">
    <!--SelectionChanged="list_SelectionChanged"-->
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock Text="{Binding hline}" FontSize="{StaticResource PhoneFontSizeMedium}" TextWrapping="Wrap" Width="474" />
                <TextBlock Text="{Binding body}" Margin="0,0,0,36"  FontSize="{StaticResource PhoneFontSizeNormal}" TextWrapping="Wrap" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

次にコードで:

var deserialized = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Mydata>>(messagearray.ToString().Replace("<br/>", "\n"));

list.ItemsSource = deserialized;

墓石のために、私はこれをしているだけです:

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    this.SaveState(e);  // <- first line
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    this.RestoreState();  // <- second line
}

墓石を作って生き残るために、私が違ったやり方でやるべきことはありますか?

4

1 に答える 1

0

TombstoneHelper は Page State オブジェクトを直接使用し、次に組み込みのシリアライザーを使用して物事をシリアライズします。ページ内の何かで、デフォルトのシリアライザー (DataContractSerializer) が処理できない JToken が使用されています。

MVVM を使用しているように見えるので、ビュー モデルのシリアル化とストレージを自分で直接管理し、OnNavigatedTo メソッドでビューモデルを再水和することをお勧めします。

完全な再現は、より完全なソリューションに役立ちます。

于 2012-11-06T09:55:45.110 に答える