【问题标题】:How does Serialize and De-serialize work internally? [closed]序列化和反序列化如何在内部工作? [关闭]
【发布时间】:2012-05-31 07:22:34
【问题描述】:

我有很多遗留代码,其中 json 是通过使用 for 循环手动解析的。这通常需要O(n) 时间。我知道json.nettimespace 方面会更好,但深入了解它是如何工作的,将帮助我做出明智的决定,是否值得付出努力实际继续前进并投入时间和人力将所有内容移至 json.net。

【问题讨论】:

  • 您期待一种比数据单次迭代更快的算法?
  • 您希望从这个问题中得到什么?任何人都可以通过查看源代码来了解 JSON.NET 的工作原理:json.codeplex.com/SourceControl/changeset/view/65597
  • 我猜他在找工作
  • “这在内部是如何工作的”“我应该使用它吗”不同。
  • @AbhishekIyer - 征求意见并没有错误,但 SO 可能不是讨论图书馆的正确论坛。如常见问题解答中所述,“您应该只根据您面临的实际问题提出实用、可回答的问题。闲聊、开放式问题会降低我们网站的实用性,并将其他问题推到首页之外。”在其他 stackexcahnge 网站之一上,您可能会更好。

标签: c# .net json json.net


【解决方案1】:

为了将您的问题解释为更笼统的问题,假设您正在寻找有关为各种场景选择哪种 JSON 序列化实现的建议。

我知道这个问题的三个明显答案:

  • NewtonSoft JSON.NET
    • 提供丰富的功能和卓越的性能
  • ServiceStack.Text
    • 提供简单性和出色的性能
  • BCL JsonSerializer
    • 避免了第 3 方库依赖,但速度明显变慢

如果您不关心 3rd 方库依赖项,请选择第一个选项,因为它会为您提供性能和功能。如果您不需要大量功能,请评估 ServiceStack.Text 是否满足您的需求(如果不确定,请使用 JSON.NET)。在任何其他情况下,坚持你所拥有的。

另外,在您知道该特定区域是性能瓶颈(或以其他方式需要更换,例如因为它是一个维护问题)之前,不要花时间通过替换您的 JSON 代码来提高您的代码速度。如果您正在考虑替换代码以提高性能,请使用替代实现或库隔离一些方法来针对类似场景对当前代码进行分析和基准测试,以避免基于假设做出决定。

最后,了解它的内部运作方式不应成为您决策过程中的一个因素,除非您特别计划能够修改它的来源(或需要能够理解它)。

【讨论】:

    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    相关资源
    最近更新 更多