我在使用内存流进行序列化时遇到了一个问题。下面是我的代码:
/// <summary>
/// serializes the given object into memory stream
/// </summary>
/// <param name="objectType">the object to be serialized</param>
/// <returns>The serialized object as memory stream</returns>
public static MemoryStream SerializeToStream(object objectType)
{
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, objectType);
return stream;
}
/// <summary>
/// deserializes as an object
/// </summary>
/// <param name="stream">the stream to deserialize</param>
/// <returns>the deserialized object</returns>
public static object DeserializeFromStream(MemoryStream stream)
{
IFormatter formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
object objectType = formatter.Deserialize(stream);
return objectType;
}
我得到的错误如下:流不是有效的二进制格式。起始内容(以字节为单位)为:废话
我不太清楚是什么原因导致了这个错误。任何帮助都将不胜感激。
电话示例:
Dog myDog = new Dog();
myDog.Name= "Foo";
myDog.Color = DogColor.Brown;
MemoryStream stream = SerializeToStream(myDog)
Dog newDog = (Dog)DeserializeFromStream(stream);
4条答案
按热度按时间mnemlml81#
这个代码对我有效:
类型如下所示:
其使用方法是:
hrirmatl2#
使用方法序列化和反序列化内存中的集合对象。此方法适用于集合数据类型。此方法将任何类型的集合序列化为字节流。创建一个单独的类
SerilizeDeserialize
并添加以下两个方法:如何在您的类中使用这些方法:
qmb5sa223#
BinaryFormatter
在某些特定情况下可能会产生无效输出。例如,它将省略不成对的代理项字符。它还可能在接口类型的值方面存在问题。请阅读此documentation page,包括社区内容。如果您发现错误持续存在,您可能需要考虑使用XML序列化器,如
DataContractSerializer
或XmlSerializer
。93ze6v8z4#
这可以通过使用System.Text.Json在.Net 6中使用System.Text.Json轻松实现;
有关序列化,请参阅此。