Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将类序列化到数据库而不是文件系统c#_C# - Fatal编程技术网

如何将类序列化到数据库而不是文件系统c#

如何将类序列化到数据库而不是文件系统c#,c#,C#,我们可以很容易地将类序列化为平面文件,但若我想将类序列化为数据库,那个么我该怎么做?若可能的话,那个么我该如何将数据从数据库反序列化到类。 请用c#给出一个示例代码 感谢使用二进制序列化到BLOB列,或使用XML\Data contact\net Data contact到XML列 编辑:@Saurabh已经给出了二进制示例数据协定示例由提供。序列化对象时,通常对流进行序列化。您可以序列化为内存流,然后将字节读回并将其放入数据库 您当前有什么序列化代码?告诉您如何修改它比只给您完整的代码要好。您

我们可以很容易地将类序列化为平面文件,但若我想将类序列化为数据库,那个么我该怎么做?若可能的话,那个么我该如何将数据从数据库反序列化到类。 请用c#给出一个示例代码


感谢使用二进制序列化到BLOB列,或使用XML\Data contact\net Data contact到XML列


编辑:@Saurabh已经给出了二进制示例数据协定示例由提供。

序列化对象时,通常对流进行序列化。您可以序列化为内存流,然后将字节读回并将其放入数据库

您当前有什么序列化代码?告诉您如何修改它比只给您完整的代码要好。

您可以将类(开箱即用)序列化为二进制形式或XML。
在第一种情况下,您得到一个
字节[]
,在第二种情况下,您得到一个简单的
字符串


如果要在数据库中持久保存,只需将其视为需要发送到数据库的任何其他字节数组或字符串(或XML,如果您的数据库本机支持),即可。

Thomas,您在应用程序中使用的是哪种数据访问逻辑


如果您正在寻找一种与数据库交互并从中存储/检索对象的方法,您还可以查看Entity Framework或NHibernate,这样的ORM允许您关注应用程序中真正重要的内容,而不是对象/实体的加载或保存方式。

将对象序列化为XML。尝试让数据集从该XML blob中读取。
为数据集中的每个表/行创建一个DB Create语句。

与前面提到的其他语句一样,您可以使用二进制序列化在内存流中获取字节[]数组,然后在数据库中创建一个Blob/image类型的列来存储字节数组

然后在读回时,您只需使用称为反序列化的技术读回流中列的值

序列化

  BinaryFormatter bf = new BinaryFormatter();

        List<SearchFilterDetails> _list = QueryFilterDetails.ToList<SearchFilterDetails>();

        using (MemoryStream ms = new MemoryStream())
        {
            bf.Serialize(ms, _list);
            return ms.GetBuffer();
        }
BinaryFormatter bf=new BinaryFormatter();
List _List=QueryFilterDetails.ToList();
使用(MemoryStream ms=new MemoryStream())
{
bf.序列化(ms,_列表);
返回ms.GetBuffer();
}
反序列化

  private void DeSerilizeQueryFilters(byte[] items)
    {
        BinaryFormatter bf = new BinaryFormatter();

        List<SearchFilterDetails> _list = new List<SearchFilterDetails>();

        try
        {
            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(items, 0, items.Length);
                ms.Position = 0;

                _list = bf.Deserialize(ms) as List<SearchFilterDetails>;
            }

            foreach (SearchFilterDetails mobj in _list)
            {
                QueryFilterDetails.Add(mobj);
            }
        }
        catch (Exception ex)
        {
        }
    }
private void反序列化查询过滤器(字节[]项)
{
BinaryFormatter bf=新的BinaryFormatter();
列表_List=新列表();
尝试
{
使用(MemoryStream ms=new MemoryStream())
{
ms.Write(items,0,items.Length);
ms.Position=0;
_列表=bf。反序列化(ms)为列表;
}
foreach(搜索筛选器详细信息移动列表)
{
QueryFilterDetails.Add(mobj);
}
}
捕获(例外情况除外)
{
}
}

您可以对任何流进行序列化/反序列化—实际上,您得到的是一堆字节—您可以保存在文件或数据库中(在Sql Server中使用varbinary列,在oracle中使用blob)。您最好创建一个像样的数据库布局并将其转换为C代码,然后反过来。使用合适的或映射程序,或者只创建类型数据集/linq2sql。