Json序列化和存储策略

时间:2018-06-06 06:45:19

标签: c# .net json serialization deserialization

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

  1. 从数据库中反序列化json字符串以获取JObject,然后 直接使用此对象
  2. 继续解析JObject,实例化更具体的对象A,然后使用对象A
  3. 选项1对于读取的存储和初始化非常方便,但是当用于获取值字符串时,容易出错。场景2需要额外的转换层来存储和初始化读取,但使用起来更直观,更方便。我对使用哪种方案非常纠结。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

除了类型安全之外,在使用具体物体时你会获得更多好处,但我怀疑此时我正在向合唱团讲道。

您可能无法做到的一个原因是内容本身就是动态的(并且通过扩展,您的代码期望没有任何关于JSON字符串的特定内容,除非它形式良好)。很少有问题是这样的。

因此,缺点通常是编写这些具体类的时间和精力的开销。一旦定义了它们,反序列化它们就是一行代码。诀窍是使用工具从JSON字符串反向工程必要的类。由于SO策略,我不能推荐工具,但如果你使用一个节俭的搜索引擎并搜索类似JSON到c#的东西,你一定会找到一种快速创建这些dtos的方法。