与内存流C#序列化/反序列化 [英] C# serializing/deserializing with memory stream
本文介绍了与内存流C#序列化/反序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在使用内存流序列化的问题。这里是我的code:
///<总结>
///序列化给定的对象到内存流
///< /总结>
///< PARAM NAME =的objectType>在对象序列化和LT; /参数>
///<返回>将序列化对象作为内存流< /回报>
公共静态的MemoryStream SerializeToStream(对象的objectType)
{
MemoryStream的流=新的MemoryStream();
IFormatter格式=新的BinaryFormatter();
formatter.Serialize(流的objectType);
返回流;
}///<总结>
///反序列化作为对象
///< /总结>
///< PARAM NAME =流>到反序列化流< /参数>
///<返回>在反序列化对象< /回报>
公共静态对象DeserializeFromStream(MemoryStream的流)
{
IFormatter格式=新的BinaryFormatter();
stream.Seek(0,SeekOrigin.Begin);
对象的objectType = formatter.Deserialize(流);
返回的objectType;
}
我得到的错误是如下:
流不是一个有效的二进制格式。起始内容(以字节为单位)是:等等....
我不太确定是什么原因造成的错误。任何帮助将大大AP preciated。
调用示例:
狗myDog =新的狗();
myDog.Name =富;
myDog.Color = DogColor.Brown;MemoryStream的流= SerializeToStream(myDog)狗newDog =(狗)DeserializeFromStream(流);
解决方案
这code为我工作:
公共无效的run()
{
狗myDog =新的狗();
myDog.Name =富;
myDog.Color = DogColor.Brown; 的System.Console.WriteLine({0},myDog.ToString()); MemoryStream的流= SerializeToStream(myDog); 狗newDog =(狗)DeserializeFromStream(流); 的System.Console.WriteLine({0},newDog.ToString());
}
当类型是这样的:
[Serializable接口]
公共枚举DogColor
{
棕色,
黑色,
斑驳
}[Serializable接口]
公共类犬
{
公共字符串名称
{
得到;组;
} 公共DogColor颜色
{
获取;设置;
} 公共重写字符串的ToString()
{
返回的String.Format(狗:{0} / {1},名称,颜色);
}
}
和实用的方法是:
公共静态的MemoryStream SerializeToStream(对象o)
{
MemoryStream的流=新的MemoryStream();
IFormatter格式=新的BinaryFormatter();
formatter.Serialize(流,O);
返回流;
} 公共静态对象DeserializeFromStream(MemoryStream的流)
{
IFormatter格式=新的BinaryFormatter();
stream.Seek(0,SeekOrigin.Begin);
对象o = formatter.Deserialize(流);
返回O;
}
I'm having an issue with serializing using memory stream. Here is my code:
/// <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;
}
The error I'm getting is as follow: stream is not a valid binary format. The starting contents (in bytes) are: blah....
I'm not exactly sure what is causing the error. Any help would be greatly appreciated.
Example of the call:
Dog myDog = new Dog();
myDog.Name= "Foo";
myDog.Color = DogColor.Brown;
MemoryStream stream = SerializeToStream(myDog)
Dog newDog = (Dog)DeserializeFromStream(stream);
解决方案
This code works for me:
public void Run()
{
Dog myDog = new Dog();
myDog.Name= "Foo";
myDog.Color = DogColor.Brown;
System.Console.WriteLine("{0}", myDog.ToString());
MemoryStream stream = SerializeToStream(myDog);
Dog newDog = (Dog)DeserializeFromStream(stream);
System.Console.WriteLine("{0}", newDog.ToString());
}
Where the types are like this:
[Serializable]
public enum DogColor
{
Brown,
Black,
Mottled
}
[Serializable]
public class Dog
{
public String Name
{
get; set;
}
public DogColor Color
{
get;set;
}
public override String ToString()
{
return String.Format("Dog: {0}/{1}", Name, Color);
}
}
and the utility methods are:
public static MemoryStream SerializeToStream(object o)
{
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, o);
return stream;
}
public static object DeserializeFromStream(MemoryStream stream)
{
IFormatter formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
object o = formatter.Deserialize(stream);
return o;
}
这篇关于与内存流C#序列化/反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文