JKI-JSON-Serialization
JKI-JSON-Serialization copied to clipboard
JKI JSON does not deserialize objects with properties set to empty objects
This library is not able to deserialize JSON containing objects in which:
- one property is set to an empty object
- at least one other property exists, set to something like a number or a string
Given this JSON (call it "JSON A"):
{
"foo": {
"propA": {
"nestedA": 1
},
"propB": 1
}
}
And this JSON (call it "JSON B"):
{
"foo": {
"propA": {},
"propB": 1
}
}
Expected results
Both JSON A and B are valid, and JKI JSON should deserialize both without issue using Unflatten From JSON String.vi.
Actual results
Unflatten From JSON String.vi can deserialize JSON A without issue, but returns an error trying to deserialize JSON B:
Error 1527 occurred at Flattened String To Variant in Set Data Name__ogtk.vi->JKI JSON Serialization.lvlib:JSON Deserializer.lvclass:Adapt To Type.vi:3110001->JKI JSON Serialization.lvlib:JSON Deserializer.lvclass:Adapt To Type.vi:3110002->JKI JSON Serialization.lvlib:JSON Deserializer.lvclass:Unflatten From String.vi:2180001->JKI JSON Serialization.lvlib:Unflatten From JSON String.vi:4940001->Run.vi
Possible reason(s):
LabVIEW: Attempted to read flattened data of a LabVIEW class that is not currently loaded into LabVIEW.
Steps to reproduce
-
Save this LabVIEW as a VI in some directory (call it
Run.vi):
-
Create a file
example.jsonin the same directory. -
Copy JSON A into
example.jsonand save. -
Execute
Run.vi. There should be no error. -
Replace the contents of
example.jsonwith JSON B and save. -
Execute
Run.vi. You should seeError Outdisplay error 1527.
The error occurs in JSON Deserializer.lvclass:Adapt To Type.vi during a call to Set Data Name.vi
Also, like most things, the same thing is much more straightforward in C#:
void Main()
{
var json = @"
{
""foo"": {
""propA"": {},
""propB"": 1
}
}";
var root = JsonConvert.DeserializeObject<RootObject>(json);
root.Foo.PropB.Dump(); // 1
}
public class PropA
{
}
public class Foo
{
public PropA PropA { get; set; }
public int PropB { get; set; }
}
public class RootObject
{
public Foo Foo { get; set; }
}
It seems to work fine if the type definitions aren't wired to Unflatten From JSON String.vi:

I'm not sure why.