我有以下两个功能:使用DataContractSerializer的序列化,但不能反序列化回
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字符串反序列化回对象。在我得到的最后一行:
反序列化类型为[MY OBJECT TYPE HERE]的 对象时出错。 根级别的数据无效。 Line 1,position 1.
我在做什么错?我尝试了几次重写Deserialize函数,并且它似乎总是出现同样的错误。谢谢!
哦,这是我如何调用两个功能:
SomeObject so = new SomeObject();
string temp = SerializationManager.Serialize(so);
so = (SomeObject)SerializationManager.Deserialize(temp, typeof(SomeObject));
对于反序列化,将GetBytes/Write替换为“使用(StreamWriter writer = new StreamWriter(stream,encoding){writer.Write(xml); ...}“以避免额外的字节[]缓冲区 – crokusek 2013-01-10 03:51:00
这真棒,并且仍然非常有帮助,最重要的是,这是正确的 – Feign 2015-07-27 18:24:40
我也使用过这些方法,但是当serialize-deserialize ([link](https://stackoverflow.com/a/45443874/3785903))来提供基类的类型。 – 2017-08-01 17:15:38