使用二进制序列化的不同方式
本文关键字:方式 序列化 二进制 | 更新日期: 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;
}
}
试一试,让我知道它是否有效。