我正在尝试创建一种将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();
}
但是我得到的字节数组包含一些与类中的字段无关的其他信息。我想它也在转换类的属性。
有没有办法只将类的字段序列化为字节数组?
由于
答案 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);