Also vorher prüfen oder nachher das Objekt wieder löschen.
Vorher alle Felder prüfen ist ja genau das, was ich nicht will. Dann habe ich alle Checks doppelt:
Delphi-Quellcode:
if (Field1 <> Default1) and (Field2 <> Default2) and ... then
begin
Builder.BeginObject(FieldName);
if (Field1 <> Default1) then Builder.Add('field1', Field1);
if (Field2 <> Default2) then Builder.Add('field2', Field2);
..
Builder.EndObject;
end;
Objekt nachher löschen: Sicherlich. Im Builder selbst habe ich dafür allerdings keine entsprechenden Methoden gefunden. Einziges Workaround, was mir im Moment vorschwebt, ist es vor dem
Builder.BeginObject(FieldName)
die Position von
TStreamWriter(Builder.Writer).BaseStream
zu sichern und nach dem
Builder.EndObject
zu schauen, ob die Position mehr als 2 Bytes erhöht wurde. Dann könnte ich das leere Objekt über
Stream.Position -= 2
wieder löschen. Schön ist aber anders.