当我将对象反序列化为原始类型时,我的对象始终为null
。
这是我的代码:
ProjectSetup obj = new ProjectSetup();
if (System.Web.HttpContext.Current.Session["ProjectSetup"] == null)
setBookProjectSetup();
string toDeserialise = System.Web.HttpContext.Current.
Session["ProjectSetup"].ToString();
DataContractSerializer dcs = new DataContractSerializer(typeof(ProjectSetup));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(toDeserialise));
obj = (ProjectSetup) dcs.ReadObject(ms, true);
return obj;
答案 0 :(得分:0)
我将假设对setBookProjectSetup
的调用在ProjectSetup
中放置HttpSessionState
的实例,其密钥为ProjectSetup
。
这里的问题始于:
string toDeserialise = System.Web.HttpContext.Current.
Session["ProjectSetup"].ToString();
您随后使用toDeserialize
字符串的内容作为反序列化的来源。
除非你重载ToString
以返回DataContractSerializer
能够反序列化的字节流(极不可能),否则你可能正在使用ToString
的实现{ {1}},它只返回类型的名称。
然后,您试图将该字符串反序列化为您的对象,这不会起作用。
您需要做的是将对象正确序列化为字节数组/ MemoryStream
,如下所示:
Object
此时,using (var ms = new MemoryStream())
{
// Create the serializer.
var dcs = new DataContractSerializer(typeof(ProjectSetup));
// Serialize to the stream.
dcs.WriteObject(ms, System.Web.HttpContext.Current.Session["ProjectSetup"]);
将填充一系列表示序列化对象的字节。然后,您可以使用相同的MemoryStream
:
MemoryStream