我正在使用 FreePascal 中的 mORMot 框架将对象序列化为 JSON。我需要在生成的 JSON 中将字符串字段之一表示为 null,而不是空字符串。但是,当使用 ObjectToJSON 函数时,该字段显示为空字符串。
这是我尝试对课程进行的操作的示例:
uses
SysUtils,
SynCommons;
type
TPersonClass = class(TSynPersistent)
private
FName: String;
FAge: Integer;
published
property Name: String read FName write FName;
property Age: Integer read FAge write FAge;
end;
var
Person: TPersonClass;
JSON: RawUTF8;
begin
Person := TPersonClass.Create;
try
Person.Name := ''; // I want this to be null in the JSON
Person.Age := 30;
JSON := ObjectToJSON(Person, [woHumanReadable]);
Writeln(JSON);
finally
Person.Free;
end;
end.
当前输出类似于:
{
"Name": "",
"Age": 30
}
但我希望 JSON 是:
{
"Name": null,
"Age": 30
}
如何调整序列化,使“名称”字段为空而不是空字符串? mORMot 中是否有任何配置或最佳实践来处理此问题?
我找到解决办法了! 要使用 mORMot 表示 JSON 中的空字符串字段,您可以将该属性声明为 Variant 类型。当您希望 JSON 输出中该字段为空时,这允许您显式地将 Null 分配给该字段。
type
TPersonClass = class(TSynPersistent)
private
FAge: Integer;
FName: Variant;
published
property Name: Variant read FName write FName;
property Age: Integer read FAge write FAge;
end;
你可以这样使用它:
var
Person: TPersonClass;
JSON: RawUTF8;
begin
Person := TPersonClass.Create;
try
Person.Name := Null; // This will be serialized as null
//Person.Name := 'Jhon';// Output: { "Name": "Jhon", "Age": 30 }
Person.Age := 30;
JSON := ObjectToJSON(Person, []);
Writeln(JSON); // Output: { "Name": null, "Age": 30 }
finally
Person.Free;
end;
end.