使用Parse.com,我有一个这样的子类:
[DataContract]
[ParseClassName("Event")]
public class TestDerivedObject : ParseObject
{
[DataMember]
[ParseFieldName("name")]
public string Name
{
get { return GetProperty<string>(); }
set { SetProperty(value); }
}
[DataMember]
[ParseFieldName("description")]
public string Description
{
get { return GetProperty<string>(); }
set { SetProperty(value); }
}
}
当我尝试保存此类对象的实例时:
ApplicationDataContainer _localSettings = ApplicationData.Current.LocalSettings;
_localSettings.Values["Test"] = myTestDerivedObject ;
它引发了一个例外:
WinRT信息:尝试序列化要写入的值时出错 到应用程序数据存储
其他信息:不支持此类型的数据。
如何将这样的对象安全地保存到本地存储?我在Android实现中看到,您可以使用Pin
方法为您执行此操作!
答案 0 :(得分:2)
Windows 10(UWP)不允许您在LocalSettings
字典中存储复杂对象。
应用设置支持大多数Windows运行时数据类型:
- UInt8,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double
- 布尔
- Char16,String
- DateTime,TimeSpan
- GUID,Point,Size,Rect
- ApplicationDataCompositeValue
您无法直接将其他类型的对象分配给应用数据。您可以将数据序列化为其中一种受支持的数据类型,例如,您可以将数据序列化为JSON并将其存储为字符串,但是您需要处理序列化。
来源:MSDN
所以你必须自己序列化为一个字符串。在我看来,最简单的方法是使用JSON.NET序列化为JSON:
string serialized = JsonConvert.SerializeObject(myTestDerivedObject);
更新(由@Depechie提供给我)
看起来你基本上是screwed,因为你正在使用Parse.com
个对象。因为这些对象是要序列化的PITA,因为它们实现了IEnumerable<KeyValuePair<string, object>>
。可能的解决方案是使用例如AutoMapper
将Parse.com
对象映射到另一个自定义类型(或手动映射属性)并序列化您自己的类型。