Ich benutze json.net (Newtonsoft JsonSerializer). Ich muss die Serialisierung anpassen, um die folgenden Anforderungen zu erfüllen:Newtonsoft JsonSerializer - Kleinbuchstaben Eigenschaften und Wörterbuch
- Eigenschaftsnamen müssen mit Kleinbuchstaben beginnen.
- Dictionary muss in jsonp serialisiert werden, wobei Schlüssel für Eigenschaftsnamen verwendet werden. Die LowerCase-Regel gilt nicht für Wörterbuchschlüssel.
zum Beispiel:
var product = new Product();
procuct.Name = "Product1";
product.Items = new Dictionary<string, Item>();
product.Items.Add("Item1", new Item { Description="Lorem Ipsum" });
muss in serialisiert:
{
name: "Product1",
items : {
"Item1": {
description : "Lorem Ipsum"
}
}
}
Hinweis, dass eine Immobilie in "name" serialisiert, aber Schlüssel element1 serialisiert in "Element1";
Ich habe versucht, CustomJsonWriter zu erstellen, um Eigenschaftsnamen zu serialisieren, aber es ändert auch dicionary Schlüssel.
public class CustomJsonWriter : JsonTextWriter
{
public CustomJsonWriter(TextWriter writer) : base(writer)
{
}
public override void WritePropertyName(string name, bool escape)
{
if (name != "$type")
{
name = name.ToCamelCase();
}
base.WritePropertyName(name, escape);
}
}
Dies ist keine Verletzung. Es bietet eine Zuordnung, die bei der Datenserialisierung erforderlich sein kann. Dies liegt an der Nichtübereinstimmung zwischen C# -Variablennamen und dem zugrundeliegenden Serialisierungsformat - nicht beschränkt auf JSON. – Metro
Nun, wenn es eine Regel oder Konvention gibt, die verwendet werden kann, um das Mapping zu bestimmen, dann ist es eine Verletzung von DRY – Liero
Das DRY-Prinzip wird wie folgt festgelegt: "Jedes Wissen muss eine einzige, unzweideutige, autoritative Repräsentation in einem System haben von jedem einzelnen Element eines Systems erfordert keine Änderung in anderen logisch nicht verwandten Elementen. Darüber hinaus ändern sich Elemente, die logisch miteinander verwandt sind, vorhersagbar und einheitlich und werden somit synchron gehalten. " – Liero