Atom飞行手册翻译: 4.4 Atom中的序列化

简介: Atom中的序列化当一个窗口被刷新,或者从上一次会话恢复的时候,视图和它相关的对象会从JSON表达式中反序列化,它们在窗口上一次关闭时储存。

Atom中的序列化

当一个窗口被刷新,或者从上一次会话恢复的时候,视图和它相关的对象会从JSON表达式中反序列化,它们在窗口上一次关闭时储存。要使你自己的视图和对象兼容刷新,你需要让它们很好地执行序列化和反序列化。

包的序列化钩子

你的包的主模块可以选择包含一个serialize方法,它在你的包反激活之前被调用。你应该返回JSON,它会交还给你作为下次调用activate的参数。在下面的例子中,这个包将一个MyObject的实例在刷新过程中保持相同的状态。

module.exports =
  activate: (state) ->
    @myObject =
      if state
        atom.deserializers.deserialize(state)
      else
        new MyObject("Hello")

  serialize: ->
    @myObject.serialize()

序列化方法

class MyObject
  atom.deserializers.add(this)

  @deserialize: ({data}) -> new MyObject(data)
  constructor: (@data) ->
  serialize: -> { deserializer: 'MyObject', data: @data }

.serialize()

你想要序列化的对象需要实现.serialize(),这个方法需要返回一个序列化的对象。而且它必须包含一个叫做deserializer的键,它的值为一个已注册的反序列化器的名字,它能够转换对象剩余的数据。它通常是类的名称本身。

@deserialize(data)

另一方面是deserialize方法,它通常是个类级的方法,位于实现serialize方法相同的类中。它的作用是将一个上一次serialize调用返回的状态对象转化为一个真正的对象。

atom.deserializers.add(class)

你需要在你的类中调用atom.deserializers.add方法来使它对反序列化系统可见。现在你可以带着serialize返回的状态调用全局的deserialize方法,你的类中的deserialize会自动被选择。

版本控制

class MyObject
  atom.deserializers.add(this)

  @version: 2
  @deserialize: (state) -> ...
  serialize: -> { version: @constructor.version, ... }

你的可序列化类可以带有一个可选的@version类级属性,并且在序列化的状态中持有version键。反序列化的时候,Atom只在版本匹配的时候尝试对其反序列化,否则返回undefined。我们计划在未来实现一个迁移系统,但是现在至少能防止你对旧的状态反序列化。

相关文章
|
JSON Java 测试技术
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(1)
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(1)
|
存储 JSON Java
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(2)
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(2)
107 0
|
XML JSON Java
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(3)
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(3)
|
JSON Java fastjson
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(4)
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(4)
|
JSON Java 测试技术
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(6)
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(6)
|
JSON Java 测试技术
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(7)
《Java工程师必读手册》——Java单元测试系列——Java单元测试技巧之JSON序列化(7)
|
29天前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
1月前
|
存储 开发框架 .NET
解锁SqlSugar新境界:利用Serialize.Linq实现Lambda表达式灵活序列化与反序列化,赋能动态数据查询新高度!
【8月更文挑战第3天】随着软件开发复杂度提升,数据查询的灵活性变得至关重要。SqlSugar作为一款轻量级、高性能的.NET ORM框架,简化了数据库操作。但在需要跨服务共享查询逻辑时,直接传递Lambda表达式不可行。这时,Serialize.Linq库大显身手,能将Linq表达式序列化为字符串,实现在不同服务间传输查询逻辑。结合使用SqlSugar和Serialize.Linq,不仅能够保持代码清晰,还能实现复杂的动态查询逻辑,极大地增强了应用程序的灵活性和可扩展性。
75 2
|
6天前
|
存储 Java
Java编程中的对象序列化与反序列化
【9月更文挑战第12天】在Java的世界里,对象序列化与反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何通过实现Serializable接口来标记一个类的对象可以被序列化,并探索ObjectOutputStream和ObjectInputStream类的使用,以实现对象的写入和读取。我们还将讨论序列化过程中可能遇到的问题及其解决方案,确保你能够高效、安全地处理对象序列化。
|
22天前
|
存储 Java
Java编程中的对象序列化与反序列化
【8月更文挑战第28天】在Java世界中,对象序列化与反序列化是数据持久化和网络传输的关键技术。本文将深入浅出地探讨这一过程,带你领略其背后的原理及应用,让你的程序在数据的海洋中自由航行。