C# 对象二进制序列化
我想对一个对象进行二进制序列化,并将结果保存在数据库中。
Person person = new Person();
person.Name = "something";
MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, person);
如何将内存流转换为字符串类型以保存在数据库中,然后才能反序列化对象?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您真正要求的是一种将任意二进制数据表示为文本然后再次将其转换回来的安全方法。它存储序列化对象的事实是无关紧要的。
答案几乎是使用 Base 64(例如
Convert.ToBase64String
和Convert.FromBase64String
)。请勿使用Encoding.UTF8.GetString
或任何类似内容 - 您的二进制数据不是编码的文本数据,因此不应被视为此类数据。但是,您的数据库没有二进制数据的数据类型吗?检查 BLOB、IMAGE 和 BINARY 类型...
What you're really asking for is a safe way of representing arbitrary binary data as text and then converting it back again. The fact that it stores a serialized object is irrelevant.
The answer is almost to use Base 64 (e.g.
Convert.ToBase64String
andConvert.FromBase64String
). Do not useEncoding.UTF8.GetString
or anything similar - your binary data is not encoded text data, and shouldn't be treated as such.However, does your database not have a data type for binary data? Check for BLOB, IMAGE and BINARY types...
这是示例。 TData 必须标记为 [Serializable],并且所有字段类型也必须标记为。
Here's the sample. TData must be marked [Serializable] and all fields type also.
我用过这样的东西
I used something like this
基本上,不要将数据作为字符串保存到数据库中,有
blob
字段可用于存储二进制数据。如果您确实需要将数据作为字符串,则需要使用 base64 编码将 byte[] 转换为字符串,并使用解码从字符串中获取 byte[]。
Basically, don't save the data as string to the database, there are
blob
fields available to store binary data.If you really need to have the data as string, you'll need to convert your byte[] to a string using base64 encoding, and to grab the byte[] from a string use decoding.
您是否没有考虑过将内存流转换为要放入数据库的 Base64hex 字符串?
然后您可以将内容 sConvertdHex 转储到数据库。要反序列化它,您需要执行相反的操作
,然后将 mData 反序列化回您的对象。
Have you not looked into converting the memorystream into a base64hex string to be put into the database?
Then you can dump the contents sConvertdHex to the database. To deserialize it you need to do the reverse
then deserialize mData back to your object.