Ema*_*uel 32 c# string serialization binaryformatter
我想对对象进行二进制序列化,并将结果保存到数据库中.
Person person = new Person();
person.Name = "something";
MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, person);
Run Code Online (Sandbox Code Playgroud)
如何将字符串类型中的memorystream转换为保存在数据库中,之后能够反序列化对象?
Jon*_*eet 53
您真正要求的是一种将任意二进制数据表示为文本然后再将其转换回来的安全方法.它存储序列化对象的事实是无关紧要的.
答案几乎是使用Base 64(例如Convert.ToBase64String和Convert.FromBase64String).千万不能使用Encoding.UTF8.GetString或任何类似-您的二进制数据未编码的文本数据,并且不应该被如此对待.
但是,您的数据库是否没有二进制数据的数据类型?检查BLOB,IMAGE和BINARY类型......
Sia*_*huk 40
这是样本.必须将TData标记为[Serializable]并且所有字段都必须键入.
private static TData DeserializeFromString<TData>(string settings)
{
byte[] b = Convert.FromBase64String(settings);
using (var stream = new MemoryStream(b))
{
var formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin);
return (TData)formatter.Deserialize(stream);
}
}
private static string SerializeToString<TData>(TData settings)
{
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, settings);
stream.Flush();
stream.Position = 0;
return Convert.ToBase64String(stream.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
小智 15
//-------write to database-------------------------
Person person = new Person();
person.name = "Firstnm Lastnm";
MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, person);
byte[] yourBytesToDb = memorystream.ToArray();
//here you write yourBytesToDb to database
//----------read from database---------------------
//here you read from database binary data into yourBytesFromDb
MemoryStream memorystreamd = new MemoryStream(yourBytesFromDb);
BinaryFormatter bfd = new BinaryFormatter();
Person deserializedperson = bfd.Deserialize(memorystreamd) as Person;
Run Code Online (Sandbox Code Playgroud)
Adr*_*der 12
我用过这样的东西
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, Person);
memoryStream.Flush();
memoryStream.Position = 0;
string value = Convert.ToBase64String(memoryStream.ToArray());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64099 次 |
| 最近记录: |