【问题标题】:.net core Serialize and deserialize Generic type.net core 序列化和反序列化通用类型
【发布时间】:2021-12-03 06:23:41
【问题描述】:
class Order<T>
{
  public Int orderId { get; set; }
  
  public IDictionary<string, T> Details { get; set; }

}

我想使用实体框架将其作为字节数组存储在 sql db Details

是否可以存储和检索它并重新构造回 Order 对象?

有什么建议吗?

其他选项是,我可以更改为byte[] 并存储在数据库中,但不确定如何将字节数组反序列化回IDictionary&lt;string, T&gt;

【问题讨论】:

  • Sql server 支持json列/json数据。我不确定 EF 是否可以,但您可能可以使用一些值转换器或任何 EF 调用它们来模拟它。

标签: c# json .net entity-framework .net-core


【解决方案1】:

您可以使用Value Conversion 将属性存储为 JSON 字符串(更好)或 byte[](易碎、不可读、无法在数据库中使用)。

【讨论】:

  • 除非是图片、音频文件、视频文件、excel文件等。如果存储的记录需要加密也不行。
  • 显然图片或视频将存储为byte[],并且应用客户端加密是文档中的示例之一。
  • 我指出这一点是因为新程序员或试图将他们的知识扩展到新领域的人可能不会觉得这是“显而易见的”。
【解决方案2】:

要序列化和反序列化您的对象,请查看Convert any object to a byte[]的答案

获得字节数组后,您可以使用 blob 存储列将其读取并写入数据库。

但是,这样做非常危险。数据库架构中的任何更改都将导致重大更改。这将要求您将每一行读入外部程序并将其转换为新格式,因为您将无法使用 SQL 脚本执行迁移。

出于同样的原因,同样不建议将其存储为 JSON 或 XML 数据。该死,根据您的数据,它们甚至可能更糟(从未见过 JSON 文档很好地存储图像)。

如果您有时间,请创建一个映射表并自己构建字典。我不确定 T 是什么,但如果它是另一个数据库记录,那么你已经设置好了。否则也许二进制序列化是要走的路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多