C# 连载问题
目前,我需要序列化一个包含更多我自己的对象类的对象。 但问题是我不想将它保存在文件中,然后将其检索到内存流中。 是否有任何方法可以直接将我的对象序列化到流中 我使用BinaryFormatter进行sealize。 首先,我使用MemoryStream直接获取序列化输出,但它给出了一个错误 在反序列化时。但后来我用一个文件序列化它,然后关闭它并 再次打开它,它工作得很好。但我想把它直接带到流中,因为 在我的程序中,我需要经常这样做,以便将其传递到网络客户端。和使用文件 反复使用可能会降低我的软件速度C# 连载问题,c#,serialization,C#,Serialization,目前,我需要序列化一个包含更多我自己的对象类的对象。 但问题是我不想将它保存在文件中,然后将其检索到内存流中。 是否有任何方法可以直接将我的对象序列化到流中 我使用BinaryFormatter进行sealize。 首先,我使用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;
}
如果您正试图从同一内存流
反序列化,您是否记得先返回到流的开头
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;
}
这是一个快速而肮脏的示例,它是一个前后序列化字符串的示例。这就是你想做的吗
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;
}
这是一个快速而肮脏的示例,它是一个前后序列化字符串的示例。这就是你想做的吗
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;
}
使用MemoryStream
时会出现什么错误?您是说.Net吗?我想你是从你提到的类型的名字来的。你能确认吗?你得到的错误是什么?错误是“意外的文件结尾”@Huran:你没有提到你使用的语言/环境。根据您提到的类型名称,我猜您使用的是.NET,但您可能应该在问题上加上“.NET”或“c”。使用MemoryStream
时会出现什么错误?您是在说.NET吗?我想你是从你提到的类型的名字来的。你能确认吗?你得到的错误是什么?错误是“意外的文件结尾”@Huran:你没有提到你使用的语言/环境。根据你提到的类型名称,我猜你正在使用.NET,但你可能应该在问题上加上“.NET”或“c”。你知道我是一个非常愚蠢的人,我怎么会忘记这一点。谢谢你,伙计。抱歉打扰大家了。+1特别提到了搜索,这似乎是OP的问题。@Harun,如果这个答案正确地解决了您的问题,请单击数字下的复选标记,将其标记为正确答案。这会给海报代表的答案打分,并帮助你自己获得“%accepted”分数,鼓励人们回答你的问题。你知道我是一个非常愚蠢的人,我怎么会忘记这一点。谢谢你,伙计。抱歉打扰大家了。+1特别提到了搜索,这似乎是OP的问题。@Harun,如果这个答案正确地解决了您的问题,请单击数字下的复选标记,将其标记为正确答案。这会给海报代表的答案打分,并帮助你自己获得“%accepted”分数,鼓励人们回答你的问题。