【问题标题】:Json serialization and storage strategy [closed]Json序列化和存储策略[关闭]
【发布时间】:2018-11-15 18:01:35
【问题描述】:

Json 常用于 Web 应用程序。我将数据库中的一个字段设置为文本以存储 json 字符串。以这种方式设计数据库可能不是一个好主意,但我的理由是数据的组成可能是易变的,不需要外部连接。使用Newtonsoft之类的Json序列化工具可以很方便的将数据库中的json字符串反序列化为JObject对象,但是在静态语言程序中,肯定需要一些更具体的对象来表达,而现在我面临一些Optional选项:

  1. 从数据库中反序列化json字符串得到JObject,然后 直接使用这个对象
  2. 继续解析JObject,实例化一个更具体的对象A,然后使用对象A

选项1对于读取的存储和初始化非常方便,但是用于获取值字符串时,容易出错。场景二需要额外的一层转换来存储和初始化reads,但是使用起来更加直观方便。我很纠结要使用哪种方案。

【问题讨论】:

    标签: c# .net json serialization deserialization


    【解决方案1】:

    “使用更直观方便”是这里的关键。您应该始终尝试以可读和可维护的方式编写代码,如果为 JSON 数据创建模型对象有助于实现此目标,并且这不会影响超出项目可接受范围的性能,那就去做吧;额外的转换层是值得的。

    【讨论】:

      【解决方案2】:

      除非有你不能的原因,否则我会有一个具体的 dto 可以将你的 JSON 反序列化为。这为您提供了所有用法的编译时类型安全性(至少在初始实例化之后)。我通常会更进一步,拥有一个可以从该 dto 实例化自身的业务对象类,但这显然取决于您的具体要求。

      除了类型安全之外,使用具体对象时还可以获得更多好处,但我怀疑此时我是在向合唱团讲道。

      您可能无法做到的一个原因是内容本身在本质上是动态的(并且通过扩展,您的代码不期望 JSON 字符串的任何特定内容,除了它可能格式正确)。不过很少有这样的问题。

      因此,缺点通常是编写这些具体类的时间和精力的开销。一旦定义了它们,反序列化它们实际上就是 1 行代码。诀窍是使用一种工具从 JSON 字符串中对必要的类进行逆向工程。由于 SO 政策,我不能推荐工具,但是如果您要使用与节俭押韵的搜索引擎并搜索 JSON 到 c# 之类的内容,您一定会找到一种快速的方法来创建这些 dto。

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 2010-11-04
        • 2010-09-12
        • 2021-01-19
        相关资源
        最近更新 更多