|
- Deserialization
- Change of behavior in version 10: generating a XML serialization for the Mobile devices
- Speed
- Serializing the members of classes and structures
- Serialization name of classes
- Limits
Serialize (Function) In french: Sérialise Transforms the following elements into a specific format: - a structure (and its sub-elements).
- a class (and its sub-elements).
- an array (including the associative arrays).
- a queue.
- a stack.
- a list.
Versions 15 and lateran advanced type of variable ( gglCalendar for example). New in version 15an advanced type of variable ( gglCalendar for example). an advanced type of variable (gglCalendar for example).
The available formats are XML, binary and JSON. Then, the initial format can be retrieved by Deserialize.
// This example explains how to use the Serialize/Deserialize functions // with an Array variable. // These functions can use all types of WLanguage variables. MyArray is array of strings bufResult is an HEX@ // Adds elements into the array Add(MyArray, "WINDEV") Add(MyArray, "WEBDEV") Add(MyArray, "WINDEV MOBILE") // Serialize the array in the buffer in JSON // => Save the array and its entire content in a JSON string Serialize(MyArray, bufResult, psdJSON) // Deserialize the JSON buffer // => Rebuild the WLanguage array from the JSON string MyRebuiltArray is array of strings Deserialize(MyRebuiltArray, bufResult, psdJSON)
Syntax
Serialize(<Variable> , <Buffer> , <Parameters> [, <Root name>])
<Variable>: Type of variable Variable to serialize. This variable is a structure, a class, an array, a queue, a list or a stack. <Buffer>: Ansi character string or buffer Variable that contains the result of serialization. <Parameters>: Integer constant Type of serialization: | | psdBinary | Binary serialization.
| Versions 17 and laterpsdBinaryFormat16 New in version 17psdBinaryFormat16 psdBinaryFormat16 | Binary serialization in 16-compatible format. This format must be used if an application in version 17 must provide data to an application in version 16 or earlier. This format must not be used in Unicode mode. | Versions 19 and laterpsdJSON New in version 19psdJSON psdJSON | JSON serialization. The encoding used corresponds to the JSON standard: - the use of 7-bit ASCII encoding, i.e. the first 128 characters, the unaccented characters,
- the use of JSON encoding of the other characters: "\u" followed by the character code in 4-byte hexadecimal format. Example: for "é" (ASCII code 233, hexadecimal code E9), the encoding corresponds to "\u00E9".
| Versions 24 and laterpsdMinified New in version 24psdMinified psdMinified | JSON serialization. The encoding used corresponds to the JSON standard. This constant is used to generate a JSON by removing unnecessary spaces (carriage returns, spacing characters, etc.). | Versions 22 and laterpsdFormatting New in version 22psdFormatting psdFormatting | Serialization in JSON or XML format with carriage return and indent. The encoding used corresponds to the JSON or XML standard. Caution: This constant must be combined with the psdJSON or psdXML constant. | psdXML | XML serialization with reference to sub-objects. This type of serialization allows you to use the XML format as storage and exchange modes between applications written in WLanguage. | Versions 20 and laterpsdXMLAggregated New in version 20psdXMLAggregated psdXMLAggregated | XML serialization with direct aggregation of sub-objects. This type of serialization allows you to easily generate an XML file in a standard format to perform exchanges with other systems. Remark: A deserialization in psdXMLAggregated mode is available, however the WLanguage elements (variants, arrays, derived classes, ...) will differ from the source ones. |
<Root name>: Character string (with quotes) Versions 20 and laterName of the root of the generated XML. This parameter is taken into account in psdXMLAggregated mode only. If this parameter is not specified, the name of the root is "DOCUMENT". New in version 20Name of the root of the generated XML. This parameter is taken into account in psdXMLAggregated mode only. If this parameter is not specified, the name of the root is "DOCUMENT". Name of the root of the generated XML. This parameter is taken into account in psdXMLAggregated mode only. If this parameter is not specified, the name of the root is "DOCUMENT".
Remarks Deserialization The deserialization of an array, queue, list or stack deletes the content from this element. If additional members are found in the structure or in the class: - if a structure or a class is deserialized: the additional members keep the value they had before the deserialization.
- if an array of structure or class is deserialized: the additional members take the default value of the member type.
If additional members are found in the serialized buffer, they are ignored during the deserialization. To deserialize an untyped dynamic array, this array must be allocated beforehand. To deserialize a class or a structure containing an untyped dynamic array, this array must be allocated beforehand. The XML deserialization requires the wdxxxxml.dll or wpxxxxml.dll library. Change of behavior in version 10: generating a XML serialization for the Mobile devices Up to version 100050, the use of the psdXML constant did not generate a valid XML file. The generated format caused problems on Mobile devices. This problem was fixed. An XML file created with a version later than version 100050 cannot be read by a program compiled with an earlier version. To keep the operating mode of version 100050, all you have to do is use the psdXML_OldFormat constant. Speed The binary serialization is faster than the XML serialization. Versions 19 and laterSerializing the members of classes and structures By default, all the members of a class or structure are serialized. You have the ability to precisely manage the serialization of each member: - by specifying the member that will be serialized during the call to Serialize.
This operation can be performed on all types of serialization (XML, JSON, binary).
- by changing the name of the member during the serialization with Serialize.
This operation can be performed during a binary serialization only.
This management of serialization is performed by using the following syntax: - Serialization (or not) of a member :
<Member name> is <Member type> [, Serialize = <True/False>] [, xmlAttribute]
- Serialization and change of member name:
<Member name> is <Member type> [, Serialize = <New name>] [, xmlAttribute]
Versions 20 and laterThe "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only. New in version 20The "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only. The "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only.
Example for a class:
Cl is Class // Serialized member SerializedMember is int // Non-serialized member NonSerializedMember is string, Serialize = false // Member renamed during the serialization RenamedMember is int, Serialize = "NewMemberName" END
Remark: To avoid serializing an array member, use the following syntax:
t is array <Serialize = False> of int t2 is array <Serialize = "<serialization name>"> of int
New in version 19Serializing the members of classes and structures By default, all the members of a class or structure are serialized. You have the ability to precisely manage the serialization of each member: - by specifying the member that will be serialized during the call to Serialize.
This operation can be performed on all types of serialization (XML, JSON, binary).
- by changing the name of the member during the serialization with Serialize.
This operation can be performed during a binary serialization only.
This management of serialization is performed by using the following syntax: - Serialization (or not) of a member :
<Member name> is <Member type> [, Serialize = <True/False>] [, xmlAttribute]
- Serialization and change of member name:
<Member name> is <Member type> [, Serialize = <New name>] [, xmlAttribute]
Versions 20 and laterThe "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only. New in version 20The "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only. The "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only.
Example for a class:
Cl is Class // Serialized member SerializedMember is int // Non-serialized member NonSerializedMember is string, Serialize = false // Member renamed during the serialization RenamedMember is int, Serialize = "NewMemberName" END
Remark: To avoid serializing an array member, use the following syntax:
t is array <Serialize = False> of int t2 is array <Serialize = "<serialization name>"> of int
Serializing the members of classes and structures By default, all the members of a class or structure are serialized. You have the ability to precisely manage the serialization of each member: - by specifying the member that will be serialized during the call to Serialize.
This operation can be performed on all types of serialization (XML, JSON, binary).
- by changing the name of the member during the serialization with Serialize.
This operation can be performed during a binary serialization only.
This management of serialization is performed by using the following syntax: - Serialization (or not) of a member :
<Member name> is <Member type> [, Serialize = <True/False>] [, xmlAttribute]
- Serialization and change of member name:
<Member name> is <Member type> [, Serialize = <New name>] [, xmlAttribute]
Versions 20 and laterThe "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only. New in version 20The "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only. The "xmlAttribute" extension attribute is used to specify that the member is created as attribute (instead of tag). This attribute is taken into account during a psdXMLAggregated serialization only.
Example for a class:
Cl is Class // Serialized member SerializedMember is int // Non-serialized member NonSerializedMember is string, Serialize = false // Member renamed during the serialization RenamedMember is int, Serialize = "NewMemberName" END
Remark: To avoid serializing an array member, use the following syntax:
t is array <Serialize = False> of int t2 is array <Serialize = "<serialization name>"> of int
Versions 20 and laterSerialization name of classes The "Serialize" extension attribute is available for the classes in order to specify the serialization name. The following syntax is used:
<Class name> is Class [, Serialize = <New name>]
New in version 20Serialization name of classes The "Serialize" extension attribute is available for the classes in order to specify the serialization name. The following syntax is used:
<Class name> is Class [, Serialize = <New name>]
Serialization name of classes The "Serialize" extension attribute is available for the classes in order to specify the serialization name. The following syntax is used:
<Class name> is Class [, Serialize = <New name>]
Example:
CTest is a Class, Serialize = "Test" m_sName is a string, Serialize = "Name". m_sFirst name is a string, Serialize= "First name". m_sSuiteFirstName is a string, Serialize= "SuiteFirstName"., END sXML is an HEX@ myTest is a CTest monTest.m_sNom = "Mon Nom" myTest.m_sFirst Name = "My First Name" myTest.m_sSuiteFirstname = "My First Name My First Name" Serial (monTest, sXML, psdXMLAggregated) // Content of sXML where you can find the names of the serialization: // <?xml version="1.0" encoding="UTF-8"?> // <Test> // <Nom>Mon Nom</Nom> // <Prenom>My First Name</Prenom> // <SuitePrenom>My First Name My First Name</SuitePrenom> // </Test>
Limits - The fixed arrays and the associative arrays of local structures cannot be serialized.
- The global members of classes are not serialized.
- The XML serialization/deserialization of an array of structures with a string member containing "\0" or Charact(0) returns the following error: "Wrong serialization format". In this case, a binary serialization/deserialization must be performed.
- You cannot serialize/deserialize an array of classes or structures if this class or structure contains a dynamic array without type. A dynamic array with defined type must be used in this class or in this structure.
- To serialize/deserialize a class, you must have a constructor with 0 parameter.
- stacks, queues, lists:
- The JSON serialization of stacks, queues and lists is not available.
- Only JSON serialization is available for Record variables. No deserialization is possible.
Related Examples:
|
Unit examples (WEBDEV): The Serialize/Deserialize functions
[ + ] This example explains how to use the WLanguage functions Serialize and Deserialize. The serialization consists in saving a variable, an object, a structure, an array or any other element in a buffer. Then, this buffer can be saved on disk or sent by socket. This allows for the persistence of objects. The Deserialize function is used to rebuild an object, an array or a structure from a buffer.
|
|
Unit examples (WINDEV): The Serialize/Deserialize functions
[ + ] Using the WLanguage Serialize and Deserialize functions The serialization consists in saving a variable, an object, a structure, an array or any other element in a buffer. Then, this buffer can be saved on disk or sent by socket. This allows for the persistence of objects. The Deserialize function is used to rebuild an object, an array or a structure from a buffer.
|
Business / UI classification : Neutral code
This page is also available for…
|
|
|
| |
| Click [Add] to post a comment |
|
| |
|
| |
| |
| |
| |
| |
| |
| | |
| |