Я собираюсь предположить, что вызов setBookProjectSetup
помещает экземпляр ProjectSetup
в HttpSessionState
с ключом ProjectSetup
.
Проблема здесь начинается с этого:
string toDeserialise = System.Web.HttpContext.Current.
Session["ProjectSetup"].ToString();
Вы впоследствии используете содержимое строки toDeserialize
в качестве источника десериализации.
Если вы не перегружены ToString
для возврата байтаПоток, который DataContractSerializer
сможет десериализовать (очень маловероятно), есть вероятность, что вы используете реализацию ToString
на Object
, которая будет просто возвращать имя типа.
Затем вы пытаетесь десериализовать эту строку в ваш объект, который не будет работать.
Что вам нужно сделать, это правильно сериализовать ваш объект в байтовый массив / MemoryStream
, вот так:
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
:
// Reset the position of the stream so the read occurs in the right place.
ms.Position = 0;
// Read the object.
var obj = (ProjectSetup) dcs.ReadObject(ms);
}