将类的字段打包成c#中的字节数组

时间:2010-05-25 17:42:50

标签: c#

我正在尝试创建一种将c#类转换为字节数组的快速方法。我想到了使用我发现的一个例子将类直接序列化为字节数组:

// Convert an object to a byte array
private byte[] ObjectToByteArray(Object obj)
{
   if(obj == null)
       return null;
   BinaryFormatter bf = new BinaryFormatter();
   MemoryStream ms = new MemoryStream();
   bf.Serialize(ms, obj);
   return ms.ToArray();
}

但是我得到的字节数组包含一些与类中的字段无关的其他信息。我想它也在转换类的属性。

有没有办法只将类的字段序列化为字节数组?

由于

3 个答案:

答案 0 :(得分:4)

这就是我将类的字段序列化为byte []的方法:

public byte[] ToByteArray()
{
    using(MemoryStream stream = new MemoryStream())
    using(BinaryWriter writer = new BinaryWriter(stream))
    {
        writer.Write(MyInt);
        writer.Write(MyLong);
        writer.Write(Encoding.UTF8.GetBytes(MyString));
        ...

        return stream.ToArray();
    }
}

答案 1 :(得分:1)

您可以通过使用NonSerialized属性标记成员变量来阻止成员变量的序列化,如下所示:

[Serializable]
public class MyObject 
{
    public int n1;
    [NonSerialized] public int n2;
    public String str;
}

您甚至可以为您的班级进行自己的自定义序列化。您可以在MSDN Documentation上阅读有关它的所有信息。

答案 2 :(得分:0)

格式化程序不会序列化属性。 但它确实添加了一些元数据。 (班级全名等)

而不是bf.Serialize(ms,obj); 您可以使用函数inisde将仅序列化字段的对象

bf.Serialize(ms, field1);
bf.Serialize(ms, field2);
相关问题