c# - 使用内存流序列化/反序列化

标签 c# serialization deserialization memorystream

我在使用内存流序列化时遇到问题。这是我的代码:

/// <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;
} 

我得到的错误如下: 流不是有效的二进制格式。起始内容(以字节为单位)是:blah....

我不确定是什么导致了错误。任何帮助将不胜感激。

调用示例:

Dog myDog = new Dog();
myDog.Name= "Foo";
myDog.Color = DogColor.Brown;

MemoryStream stream = SerializeToStream(myDog)

Dog newDog = (Dog)DeserializeFromStream(stream);

最佳答案

这段代码对我有用:

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());
}

类型是这样的:

[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);
    }
}

实用方法是:

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# - 使用内存流序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10390356/

相关文章:

c# - 将 VLC 媒体播放器添加到 Visual Studio 2015

c# - Tesseract (OCR) 的特殊字符白名单

java - JMS奇怪的问题

c# - 如何区分一个 RabbitMQ 队列中的两个 JSON 对象?

c# - md5-encrypted string 从数据库返回不同于插入

C# - Json 反序列化具有子属性的对象

java - 为 Kafka 流上的窗口数据创建 SerDes

jquery序列化()+自定义?

Java,Socket : Send several object of an arrayList one by one, objectInputStream 没有全部读取

c# - 我的 EventWaitHandle 说 "Access to the path is denied",但不是