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

本文关键字:方式 序列化 二进制 | 更新日期: 2023-09-27 18:05:50

我想序列化一个没有源代码的类,有没有一种方法来二进制序列化这个类没有属性Serializable在c# ?

我使用microsoft类来做这个http://msdn.microsoft.com/en-us/library/4abbf6k0 (v = vs.110) . aspx

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

没有[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;
    }
}

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