У меня есть следующие 2 функции:
public static string Serialize(object obj)
{
DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, obj);
return Encoding.UTF8.GetString(memoryStream.GetBuffer());
}
public static object Deserialize(string xml, Type toType)
{
MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml));
// memoryStream.Position = 0L;
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(memoryStream, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null);
DataContractSerializer dataContractSerializer = new DataContractSerializer(toType);
return dataContractSerializer.ReadObject(reader);
}
Первый, кажется, отлично сериализует объект в строку XML. XML выглядит корректным, без битых тегов, без пробелов в начале или в конце и т. Д. Теперь вторая функция не хочет десериализовать мою строку XML обратно в объект. На последней строке я получаю:
Произошла ошибка при десериализации
объект типа [МОЙ ОБЪЕКТ ТИПА ЗДЕСЬ].
Данные на корневом уровне неверны.
Строка 1, позиция 1.
Что я делаю не так? Я несколько раз пытался переписать функцию десериализации, и всегда кажется, что это одна и та же ошибка. Спасибо!
О, и вот как я вызываю 2 функции:
SomeObject so = new SomeObject();
string temp = SerializationManager.Serialize(so);
so = (SomeObject)SerializationManager.Deserialize(temp, typeof(SomeObject));