我遇到了一个问题,我的应用程序的某个页面无法从墓碑恢复。尝试访问该应用程序只会导致返回主屏幕。
在调试过程中,控制台记录了三行:
- 类型的第一次机会异常
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
}
为了能够墓碑和生存,我应该做些不同的事情吗?