Direkt zum Hauptbereich

Nachtrag zum JSON Serialisierer ab Embarcadero Tokio 10.2

In einer meiner letzten Blogeinträge, sprach ich über meine Erfahrungen zu dem noch nicht so ganz vollständig dokumentierten JSON Serialisierer ab Tokio, hier nachzulesen unter Neuer JSOJN Serialisierer ab Tokyo

Bis jetzt hat er mir wertvolle Dienste erwiesen. Er ist ein Serialisierer wie man ihn sich wünscht bzw. kennt. Durch Unittests konnte ich diverse Möglichkeiten austesten. Zum Beispiel wollte ich nicht nur ein dynamisches TArray<T> als Liste exportieren, sondern auch eine TList<T>. Bei der TList<T> wurden aber immer alle Felder ins JSON geschrieben welche ich gar nicht brauchte. Natürlich gäbe es die Möglichkeit einer Ableitung und diese mit Attributen zu versehen aber wieso was neues erfinden. Eine andere aber meiner Meinung nach unschöne, ist das konvertieren einer TList<T> ToArray, ginge auch aber...

Wie man nur einen Teil der vordefinierten Typen serialisieren kann!

In diesem Fall kommt man um ein bisschen Code nicht herum, aber man kann mit TJsonDynamicContractResolver dynamisch Attribute hinzufügen oder entfernen. Wie macht man dies?

function TNathanUDV2Dto.ToJson: string;
var
  Serializer: TJsonSerializer;
  Resolver: TJsonDynamicContractResolver;
begin
  Serializer := TJsonSerializer.Create;
  try
    Resolver := TJsonDynamicContractResolver.Create;
    Resolver.ClearAttributes;
    Resolver.SetFieldsIgnored(TypeInfo(TList), ['FListHelper', 'FComparer']);
    Resolver.SetFieldName(TypeInfo(TList), 'FItems', 'Values');
    Serializer.ContractResolver := Resolver;
    Result := Serializer.Serialize(Self);
  finally
    Serializer.Free;
  end;
end;

Durch SetFieldsIgnored schliesse ich Felder aus, welche ich nicht im JSON haben möchte. Mit SetFieldName gebe ich ihnen einen anderen Namen.

Kommentare

Beliebte Posts aus diesem Blog

Neuer JSON Serialisierer ab Embarcadero Tokio 10.2

Seit Embarcadero Tokyo 10.2 veröffentlicht hat, steht uns Entwicklern ein neuer sehr gut zu gebrauchender JSON Marshaller zur Verfügung. Leider ist die Dokumentation dürftig. Das schöne ist aber, das Embarcadero sich ziemlich an gängige Verfahren hält. So konnte ich z.B. sehr einfach herausfinden was TJsonCustomCreationConverter<T> macht, nachdem ich C# Beispiele analysierte. Da es leider keine offizielle Dokumentation zum TJsonSerializer gibt, beruhen meine Beispiele auf Versuch und Irrtum. Es gibt 3 Namespaces, welche relevant sind. Zum einen "System.JSON.Serializers", für den eigentlichen Serialisierer und die Klassenattribute, zum anderen "System.JSON.Converters", für eigene Konverter und zuletzt "System.JSON.Types", für z.B. Datumsformate oder Formatierungen. TJsonSerializer Ist die wichtigste Klasse, sie ist implementiert im Namespace System.JSON.Serializers. Diese Klasse ist dafür zuständig, ein Objekt in JSON (Serialisierung) zu formati...

Delphi mit Facebook per OAuth2 verbinden

Als ich mich das erste mal mit OAuth2 zur Autorisierung beschäftigte, begann ich mit der RESTDemo.exe von Delphi zu experimentieren. Dies hat aber nicht so einfach funktioniert wie ich dachte. Also beschreibe ich hier mal mein Vorgehen wie ich mich mit Facebook Autorisieren kann. Die Vorarbeit liegt nicht unbedingt auf Seite Delphi, sondern genauso auf der Seite Facebook. Registrierung Facebook Als erstes muss man seine APP auf  https://developers.facebook.com/apps  registrieren. Als nächstes, geht man auf Einstellungen - Allgemeines und holt sich die "App-ID", in Delphi "Client-ID" und "Client-Secret", bzw. "App-Geheimcode". Beides ist später für die Url nötig. Wichtig in dem Zusammenhang, als "App Domain" "localhost" einzutragen. Um den Status der App auf Live zu stellen ist von Seite Facebook ein Links zur Datenschutzrichtlinie erforderlich. Hatte hierfür die Url meines Arbeitgebers eingetragen. Um die App Live zu s...

Wer ist Nathan Thurnreiter

Das bin ich Nathan Thurnreiter. Ein mit Leib und Seele begeisterter Delphi Programmierer. Viele Entwickler von heute kennen sich sehr gut aus wie man schnell was erstellt und ändert. Aber können Prinzipien wie SOLID oder LOD einfach nicht richtig anwenden, bzw. haben es nicht verinnerlicht. Dies bewegte mich endlich, selbst einen Blog zu eröffnen und den mal in deutsch. Nun aber mal ein bisschen zu mir. Bin über Umwege zur Informatik gestossen. Hatte zuerst Automobilmechaniker gelernt und dann Jahre beim Studium von Maschienenbau/Fahrzeugtechnik und technischer Physik verbracht, biss ich dann zum Programmieren kam. Dies begann mit Pascal bzw. Delphi und ich bin fast ausschliesslich dabei geblieben. Natürlich habe ich wie jeder Programmierer mal über den Tellerrand geschaut. Aber bis auf ein paar nervige Kleinigkeiten ist Delphi für mich die Sprache schlecht hin. Momentan leite ich ein kleines Entwickler Team, welches mit C# und Delphi ein Warenwirtschaftssystem erstellt. Die nächste...