| "The Ceylon serialization infrastructure. |
| |
| This package provides an API for *serialization libraries* to |
| provide their own serialization APIs to client code. It does not |
| provide a serialization service itself. |
| |
| This API: |
| |
| * provides a way to walk the graph of instances added for serialization, |
| including those reachable via non-\\\`shared\\\` attributes, |
| * copes with shared references and cyclic references in object graphs, |
| * prevents access to uninitialized and partially initialized instances |
| during deserialization. |
| (this includes instances reachable from other instances, transitively). |
| |
| The API cannot prevent serialization libraries from obtaining access to |
| non-\\\`shared\\\` state of instances (loss of encapsulation is |
| an inevitable part of serialization). |
| |
| A serialization library will implement some kind of |
| serializer and/or deserializer (frequently both) using the facilities |
| of this API. |
| |
| ## Serializers |
| |
| A *serializer* takes one or many Ceylon instances and serialize them |
| (and the instances reachable from them) to |
| some external representation, usually bytes or text in some specific format. |
| |
| A serializer provided by a serialization library: |
| |
| * obtains a [[SerializationContext]] by |
| calling [[serialization]], |
| * uses [[SerializationContext.references]] to find the references that |
| an instance holds, |
| * proceeds to traverse the graph of instances according to |
| library-specific rules |
| |
| ## Deserializers |
| |
| A *deserializer* constructs a graph of |
| Ceylon instances according to some external representation. |
| |
| A deserializer provided by a serialization library: |
| |
| * obtains a [[DeserializationContext]] by |
| calling [[deserialization]] |
| * progressively provides information about instances: |
| |
| * associates an instance with its |
| [[class|DeserializationContext.instance]], |
| * associates a member instance with its [[containing instance|DeserializationContext.memberInstance]], |
| * associates a referred instance with its [[referring instance and attribute|DeserializationContext.attribute]], |
| * associates a referred instance with its [[referring array index|DeserializationContext.element]], |
| * associates an instance with a [[given other instance|DeserializationContext.instanceValue]]. |
| This is useful for instances which refer to singletons |
| (on deserialization the singleton value has to be provided, since it |
| cannot be instantiated by the serialization API). |
| |
| * once the context has complete information about the instance |
| and every instance reachable from it |
| the instance can be |
| [[reconstructed|DeserializationContext.reconstruct]]. |
| |
| ## Serializability |
| |
| *Serializability* is whether or not a particular serialization library can |
| serialize a particular instance. |
| |
| Instances of classes which are annotated [[serializable]] are able to |
| enumerate their state during serialization, |
| and initialize their state during deserialization. |
| However, that does not imply that every serialization library |
| can necessarily serialize instances of every `serializable` class. |
| |
| The serializability of an instance can depend on: |
| |
| * the class of the instance, and its super classes, |
| * the serializability of the outer instance(s), if the object is an |
| instance of a member class. , |
| * the serialization library's support for serializing generic classes, |
| and member classes, |
| * the serialization library's support for serializing anonymous objects |
| (such as `true`, `null` or `smaller`), |
| * the underlying serialization format the serialization library supports |
| |
| The deserializability of an instance can depend on: |
| |
| * The runtime availability and compatibility of the class of the instances, |
| and its super classes, for each instance in the object graph. |
| " |
| by ("Gavin", "Tom") |
| tagged("Serialization") |
| since("1.2.0") |
| shared package ceylon.language.serialization; |
| |