Windows 8 在SuspensionManager.SessionState中存储字符串以外的内容

Windows 8 在SuspensionManager.SessionState中存储字符串以外的内容,windows-8,windows-runtime,Windows 8,Windows Runtime,示例应用程序包括一个Suspension Manager类,该类在字典中存储会话状态,但从不尝试在字典中存储除字符串以外的任何内容 每当我存储字符串以外的任何内容,然后触发序列化时,就会出现以下错误 类型为“System.RuntimeType”,数据协定名称为“RuntimeType”:http://schemas.datacontract.org/2004/07/System”他说。考虑使用DATACONTRORTCORDEVER或将未知类型的任何类型添加到已知类型的列表中——例如,使用No

示例应用程序包括一个Suspension Manager类,该类在字典中存储会话状态,但从不尝试在字典中存储除字符串以外的任何内容

每当我存储字符串以外的任何内容,然后触发序列化时,就会出现以下错误

类型为“System.RuntimeType”,数据协定名称为“RuntimeType”:http://schemas.datacontract.org/2004/07/System”他说。考虑使用DATACONTRORTCORDEVER或将未知类型的任何类型添加到已知类型的列表中——例如,使用NoNyType属性或将它们添加到传递给DATACONTROTTRORIGLASER的已知类型列表中。
我必须做些别的事情才能在SessionState中存储其他类型吗?

看看SessionManager代码,它只是字符串类型,我想你必须“滚动你自己的类型”
您需要做两件事:

首先,确保使用
System.Runtime.Serialization
中的
DataContract
属性修饰正在(反)序列化的类型,并确保适当修饰其成员。例如在c#中:

[DataContract]
公共结构产品
{
[数据成员]
公共Guid Id{get;set;}
[数据成员]
公共日期时间制造日期{get;set;}
[数据成员]
公共十进制成本{get;set;}
}

其次,在尝试(反)序列化之前,您需要调用SessionManager的
AddKnownType()
(T是您需要的类型)。

第二步,您是指SuspensionManager.KnownTypes.Add(T)?@diadyne我相信这两种方法都有效。SuspensionManager有一个AddKnownType()方法,该方法调用KnownTypes.Add(typeof(T))