【问题标题】:Should i DeepCopy the List<T> rather than creating isntances from it from JSON?我应该深度复制 List<T> 而不是从 JSON 中创建实例吗?
【发布时间】:2019-09-11 14:48:33
【问题描述】:

我有一个对象列表,例如 List&lt;Employee&gt;,列表中的每个员工都将从 .JSON 文件加载。我还需要从List&lt;Employee&gt; 创建新实例,只需为我需要创建的新员工更改新实例的属性,因为 JSON 文件为每个员工都有一个架构或工作流基础,我不需要每次都从头开始创建我需要List&lt;Employee&gt;的实例

简而言之, 当我需要一个新实例时?我应该创建List&lt;Employee&gt; 并再次读取 JSON 文件。 还是我应该使用DeepCloner 扩展名作为示例?用于克隆基础List&lt;Employee&gt; 并启动新的 List 实例?

json 文件也可能稍后更改。所以克隆人只会使用旧的员工名单!

我发现使用 DeepCloner 扩展从主 List&lt;Employee&gt; 创建超过 10 个实例时,性能非常棒。但是通过再次读取相同的 JSON 文件来创建 List&lt;Employee&gt; 需要更多时间。

什么是好的场景,第一个实例必须从 json 加载,但是第二个和第三个实例呢?它也应该读json吗? json 以后可能会改变吗?还是只做 DeepCloner ?或者如何实现它。

关键字: Main List&lt;Employee&gt; :这是必须从 JSON 读取的第一个实例。

Mihir Dave 对我有好处。

【问题讨论】:

  • 您正在从 JSON 反序列化一个列表,但之后就有点难以理解正在发生的事情,例如对象更改的原因,以及如果它们更改与原始 JSON 文件的连接是什么。

标签: c# .net json clone deep-copy


【解决方案1】:

如果我要实现这个,我会做如下的事情。

让我们假设 DeepCloneris 是一种缓存机制。并且在使用缓存时,您还应该考虑缓存破坏。

那么我们将如何实现呢?

创建一个返回 List 和两个静态变量的方法

private static List<Employee> globalEmployees = null;
private static DateTime globalFileModifiedTime;

public static List<Employee> GetEmployees()
{}

现在,此方法应该知道何时从文件中读取以及何时使用 DeepCloner。

什么时候不使用 DeepCloner?

  • 当globalEmployees 为空时
  • 当全局员工文件修改时间比我们存储在globalFileModifiedTime 中的时间新时

注意:每次读取文件时,请更新 globalEmployees 和 globalFileModifiedTime,以便您可以使用 DeepCloner 进行下一个请求

对于任何其他用例,您可以使用 DeepCloner。

【讨论】:

  • 但是,你有没有推荐比 DeepCloner 更好的东西?还是让它正常工作并始终从 JSON 读取?
  • DeepCloner 可用于广泛的用例。我提到的这个解决方案比只在这个用例中单独使用 DeepCloner 更好。是的,您应该使用这种方法,而不是总是从文件中读取 JSON。
  • 伙计,我还有一个问题,员工列表不能是静态的,因为它在一个可以包含客户列表的类中声明!那么请如何使这个全球员工名单非静态!这也使一个类可以有一个客户列表,如果它用contrusctor初始化,说它是一个包含客户列表而不是员工的客户类。例如。
  • 我不明白为什么普通类中不能有静态列表。无论如何,如果您遇到困难,您可以将列表和时间变量移动到另一个静态类中并从那里访问它。
  • 因为静态类不适合员工。它可能用于客户实例
猜你喜欢
  • 2011-07-03
  • 2012-06-16
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2011-04-21
  • 1970-01-01
  • 2013-05-12
  • 2023-04-01
相关资源
最近更新 更多