使用二进制序列化的不同方式

时间:2014-05-30 13:47:27

标签: c# serialization binary

我想序列化一个我没有源代码的类, 有没有办法二进制序列化这个类没有C#中的属性Serializable?

我正在使用微软类来做到这一点 http://msdn.microsoft.com/en-us/library/4abbf6k0(v=vs.110).aspx

1 个答案:

答案 0 :(得分:1)

如果没有[Serializable]属性,则无法进行二进制序列化,至少不使用默认机制。

您可以执行XmlSerialization,也可以通过反射创建自定义序列化过程。

编辑我想到了一个技巧,不确定它是否会起作用

也许您可以使用Google的协议缓冲区实现它,让我解释一下。

Google有一个非常轻快的序列化库叫做协议缓冲区,这里是.net实现:https://code.google.com/p/protobuf-net/

如果你创建一个封装目标类的类,我相信(不是100%肯定)它将序列化它。

让我们假设您要序列化的类名为ClasToSer,然后您可以创建这样的类:

[ProtoContract]
public class Encapsulator
{
    [ProtoMember(1)]
    public ClasToSer RealData{ get; set; };    

}

然后您可以使用此类序列化和反序列化:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using ProtoBuf;

public static class ProtoBuffHelper
{

    public static byte[] Serialize<T>(T Objeto)
    {

        MemoryStream ms = new MemoryStream();
        Serializer.Serialize<T>(ms, Objeto);
        byte[] data = ms.ToArray();
        ms.Dispose();
        return data;

    }


    public static T Deserialize<T>(byte[] Datos)
    {

        MemoryStream ms = new MemoryStream(Datos);
        T inst = Serializer.Deserialize<T>(ms);
        ms.Dispose();
        return inst;

    }
}

尝试一下,让我知道它是否有效。