Okay, we've got a quite useful way to very easily Import and export our objects as JSON, similar to what we already had before for XML.
So, It's a %JSON.Adaptor. But the issue here I faced with, working with Stream properties.
I have an example, when I generate an object, with stream binary stream properties. Export and Import the same, but getting the different resulting objects, depends on the original size of streams.
Class User.Test Extends (%JSON.Adaptor, %RegisteredObject)
{
Property Name As %String(%JSONFIELDNAME = "name");
Property HexStream As %Stream.GlobalBinary(%JSONFIELDNAME = "hex_stream", ENCODING = "hex");
Property Base64Stream As %Stream.GlobalBinary(%JSONFIELDNAME = "base64_stream", ENCODING = "base64");
ClassMethod Test(streamSize = {$system.SYS.MaxLocalLength()})
{
Set object = ..%New()
Set object.Name = "testing"
Set maxLength = $system.SYS.MaxLocalLength()
If streamSize<0 {
Set streamSize = maxLength + streamSize
}
Set parts = (streamSize \ maxLength) + (streamSize # maxLength > 0)
For p=1:1:parts {
Set data = ""
Set length = $Select(streamSize = maxLength: streamSize, p=parts: streamSize # maxLength, 1: maxLength)
For i=1:1:length {
Set data = data _ $Char($Random(256))
}
Do object.HexStream.Write(data)
Do object.Base64Stream.Write(data)
}
Write !,"original HexStream size = ", $Fnumber(object.HexStream.Size, ",")
Write !,"original Base64Stream size = ", $Fnumber(object.Base64Stream.Size, ",")
Do object.%JSONExportToStream(.jsonStream)
Kill object
Write !,"Exported JSON size = ", $Fnumber(jsonStream.Size, ",")
Set newObject = ..%New()
Set tSC = newObject.%JSONImport(.jsonStream)
If $$$ISERR(tSC) {
Do $System.OBJ.DisplayError(tSC)
Quit
}
Write !
Write !,"imported object HexStream size = ", $Fnumber(newObject.HexStream.Size, ",")
Write !,"imported object Base64Stream size = ", $Fnumber(newObject.Base64Stream.Size, ",")
}
}.png)
.png)
.png)
.png)



