在将自定义对象或者数组等这样的数据存储到数据库时往往需要转换成二进制字节,尤其是在一些O/RM数据库框架中,下面是转换的函数,一个是将对象转换成二进制字节数组,另一个是将从数据库中读取的二进制流转换成程序中的对象。
这里参考的资源来源,
C#序列化数据对象。它是将对象先转换成字节数组,然后再转换成Base64字符串了,字符串也可以存储到数据库中,但是不如直接将字节数组转换成Blob数据库对象简单:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入三个命名空间
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace Logistics
{
public class SerializeObjectToString
{
//将Object类型对象(注:必须是可序列化的对象)转换为二进制序列字符串
public string SerializeObject(object obj)
{
IFormatter formatter = new BinaryFormatter();
string result = string.Empty;
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
byte[] byt = new byte[stream.Length];
byt = stream.ToArray();
//result = Encoding.UTF8.GetString(byt, 0, byt.Length);
result = Convert.ToBase64String(byt);
stream.Flush();
}
return result;
}
//将二进制序列字符串转换为Object类型对象
public object DeserializeObject(string str)
{
IFormatter formatter = new BinaryFormatter();
//byte[] byt = Encoding.UTF8.GetBytes(str);
byte[] byt = Convert.FromBase64String(str);
object obj = null;
using (Stream stream = new MemoryStream(byt, 0, byt.Length))
{
obj = formatter.Deserialize(stream);
}
return obj;
}
}
}
===================下面是直接转换成字节的函数=========================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引入三个命名空间
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace Logistics
{
public class SerializeObjectToString
{
//将Object类型对象(注:必须是可序列化的对象)转换为二进制序列字符串
public byte[] SerializeObject(object obj)
{
IFormatter formatter = new BinaryFormatter();
byte[] result = null;
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
byte[] byt = new byte[stream.Length];
byt = stream.ToArray();
result=byt;
stream.Flush();
}
return result;
}
//将二进制序列字符串转换为Object类型对象
public object DeserializeObject(byte[] bt)
{
IFormatter formatter = new BinaryFormatter();
object obj = null;
using (Stream stream = new MemoryStream(bt, 0, bt.Length))
{
obj = formatter.Deserialize(stream);
}
return obj;
}
}
}