【问题标题】:how to serialize a cfc instance如何序列化cfc实例
【发布时间】:2015-11-16 19:52:36
【问题描述】:

<cfwddx> 标记可轻松用于序列化和反序列化复杂数据类型,例如数组、结构和查询,但不能用于 cfc 实例。

序列化和稍后反序列化 cfc 的最佳方法是什么?

【问题讨论】:

  • 或者,嗯。也许这根本不合理,因为组件内的数据是隐藏的。
  • 处理此问题的最佳方法可能是添加一个方法,为您提供当前 CFC 实例的数据备忘录。当我需要以 JSON 格式来回传递数据时,我经常使用此方法。
  • 正确。我也在考虑这个问题。我实际上有这样一个方法, getInstanceData() .... 所以我会使用它并序列化结果,我想。谢谢斯科特!
  • 您到底想要序列化什么?方法和属性?
  • 进一步考虑丹,我认为这取决于。基本上,我们有一个调试工具,我们可以在其中捕获数据库中的复杂数据以供以后查看和报告,并且它使用 wddx 序列化操作。我们经常向它传递结构、数组和查询,但我意识到它不处理 cfc 实例。我认为在某些情况下,cfc 元数据对于捕获是有价值的,而在其他情况下,实例的内部状态将是有价值的。所以我想调用代码需要决定。

标签: coldfusion cfml railo


【解决方案1】:

由于 CFC 实例的性质(数据隐藏),wddx 进程无法查看其“内部”以对其进行序列化。

但是,对于 CFC 实例序列化,您确实有两个选项,具体取决于您要完成的任务。

  1. 如果要序列化 ​​CFC 实例的内部状态,只需在 CFC 中添加一个方法,该方法返回 CFC 实例的变量范围。然后,您可以简单地序列化调用该方法的响应。 getMemento()getInstanceData() 应该可以工作。 -- 谢谢斯科特·斯特罗兹!

  2. 如果您想序列化 CFC 实例的元数据(属性和方法),您可以使用 ColdFusion 的内置函数 getComponentMetadata() 并序列化该调用的结果。 -- 感谢 Dan Bracuk!

【讨论】:

    【解决方案2】:

    查看 ObjectSave()ObjectLoad(),但如果序列化数据要加载到不同版本的 CF 中,IMO 可能会有风险。

    【讨论】:

      猜你喜欢
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 2018-07-03
      • 2010-10-19
      相关资源
      最近更新 更多