4

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

每当我存储除字符串之外的任何其他内容,然后触发序列化时,我都会收到以下错误

不应使用数据合同名称为“RuntimeType:http://schemas.datacontract.org/2004/07/System”的类型“System.RuntimeType”。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

我是否必须做其他事情才能在 SessionState 中存储其他类型?

4

2 回答 2

8

你需要做两件事:

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

[DataContract]
public struct Product
{
     [DataMember]
     public Guid Id { get; set; }

     [DataMember]
     public DateTime ManufactureDate { get; set; }

     [DataMember]
     public decimal Cost { get; set; }  
}

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

于 2012-08-02T13:52:07.613 回答
0

查看 SessionManager 代码它只是字符串类型,猜你将不得不“自己动手” http://code.msdn.microsoft.com/windowsapps/ApplicationData-sample-fb043eb2/sourcecode?fileId=43552&pathId=6033729

于 2012-06-01T15:28:38.667 回答