JSON camelCase

Auch wieder aus dem Gedächtnis eine Frage aus der MCP Prüfung 70-355 zum serialisieren von Objekten nach JSON. Nach reiflichen Überlegen hatte ich die Antwort geraten und lag damit vermutlich richtig. In der Fragestellung wurde kein Bezug genommen zur verwendeten JSON Library. Da Microsoft nun auch mit Windows.Data.Json eine neue Konkurrenz zu json.net anbietet, durchaus eine Überlegung. Darüber hinaus gibt es noch den alten aber kaum verwendeten DataContractJsonSerializer.

In jedem Fall drehte sich die Frage um das Ziel die Daten (vermutlich die Objektnamen) nach camelCase Notation umzuwandeln. Da beim deserialisieren wieder gleichnamige Objekte erzeugt werden, wird ein Werkzeug wie StyleCop, das auf Code Richtlinien achtet, Fehlermeldungen auswerfen.

Das folgende Beispiel verwendet JSON.NET

   1:  var liste = new ObservableCollection<person>();
   2:  liste.Add(new person { ID = 1, VorName = "Hannes" });
   3:  liste.Add(new person { ID = 2, VorName = "Alina" });
   4:  liste.Add(new person { ID = 3, VorName = "Fabian" });
   5:  textBox.Text = JsonConvert.SerializeObject(liste);

Die Ausgabe liefert idente PascalCase notierte Eigenschaften.

Per JsonProperty Attribut lässt sich das Verhalten aber steuern.

   1:   public class person
   2:      {
   3:          [JsonProperty( "TestTest")]
   4:          public int ID { get; set; }
   5:          public String VorName { get; set; }
   6:      }

Allerdings wird man den Aufwand scheuen, jedes Accessor einer Eigenschaft mit einem extra Attribut versehen zu müssen. Die Eigenschaft ContractResolver erlaubt beim Serialisieren Logik zwischen zu schalten. In dem Fall wird der von JSON.NET mitgelieferte CamelCase ContractResolver verwendet.

   1:    var json = JsonConvert.SerializeObject(liste, new JsonSerializerSettings()
   2:   { ContractResolver = new CamelCasePropertyNamesContractResolver() });

Obwohl die Lösung einfach ist, sehe ich den Aufwand durchaus kritisch, Hier wird Code geschrieben der keinen Funktionsnutzen aufweist, sondern im wesentlichen ein künstlich definiertes Qualitätsziel erfüllen hilft.

Kommentare sind geschlossen