Object serialization: Difference between revisions

Added Wren
m (→‎{{header|Raku}}: Fix code and link: Perl 6 --> Raku)
(Added Wren)
Line 2,424:
close $f
$obj printGreetings</lang>
 
=={{header|Wren}}==
{{libheader|Wren-json}}
Currently, Wren's only facility for serializing objects is to use the above JSON module. Also this module can only 'stringify' objects of built-in types so we need to provide a suitable string representation for each user-defined class.
<lang ecmascript>import "/json" for JSON
import "io" for File, FileFlags
 
class Entity {
construct new(name) {
_name = name
}
 
name { _name }
 
// JSON representation
toString { "{\"name\": \"%(_name)\"}" }
 
// mimics the JSON output
print() { System.print(this.toString.replace("\"", "")) }
 
serialize(fileName) {
var o = JSON.parse(this.toString)
File.openWithFlags(fileName, FileFlags.writeOnly) { |file|
file.writeBytes("%(o)\n")
}
}
}
 
class Person is Entity {
construct new(name, age) {
super(name)
_age = age
}
 
// JSON representation
toString { "{\"name\": \"%(name)\", \"age\": \"%(_age)\"}" }
 
// mimics the JSON output
print() { System.print(this.toString.replace("\"", "")) }
 
serialize(fileName) {
var o = JSON.parse(this.toString)
File.openWithFlags(fileName, FileFlags.writeOnly) { |file|
file.writeBytes("%(o)\n")
}
}
}
 
// create file for serialization
var fileName = "objects.dat"
var file = File.create(fileName)
file.close()
 
System.print("Calling print methods gives:")
 
var e = Entity.new("John")
e.print()
e.serialize(fileName)
 
var p = Person.new("Fred", 35)
p.print()
p.serialize(fileName)
 
System.print("\nContents of objects.dat are:")
System.print(File.read(fileName))</lang>
 
{{out}}
<pre>
Calling print methods gives:
{name: John}
{name: Fred, age: 35}
 
Contents of objects.dat are:
{name: John}
{name: Fred, age: 35}
</pre>
 
=={{header|zkl}}==
9,476

edits