目前我需要序列化我的一个对象,其中包含更多我自己的类对象。 但问题是我不想将其保存在文件中然后将其检索到内存流中。 有没有办法直接将我的对象序列化为流。
我使用BinaryFormatter进行seializing。 首先,我直接使用MemoryStream来获取序列化输出,但它给出了错误 在反序列化时。但后来当我用文件序列化它然后关闭它 再次重新打开它,它完美无缺。但我想把它直接带入流中,因为 在我的程序中,我需要经常将其传递到网络客户端。并使用文件 反复可能会减慢我的软件速度。
希望我能解决我的问题。任何Sugetion?
答案 0 :(得分:5)
如果您尝试从同一个MemoryStream
反序列化,您是否记得首先回到流的开头?
var foo = "foo";
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
// Serialize.
formatter.Serialize(stream, foo);
// Deserialize.
stream.Seek(0, SeekOrigin.Begin);
foo = formatter.Deserialize(stream) as string;
}
答案 1 :(得分:1)
这是一个快速而又脏的样本,来回串行化一个字符串。这是你想要做的吗?
static void Main(string[] args)
{
var str = "Hello World";
var stream = Serialize(str);
stream.Position = 0;
var str2 = DeSerialize(stream);
Console.WriteLine(str2);
Console.ReadLine();
}
public static object DeSerialize(MemoryStream stream)
{
BinaryFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(stream);
}
public static MemoryStream Serialize(object data)
{
MemoryStream streamMemory = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(streamMemory, data);
return streamMemory;
}