Używam json.net (Newton's JsonSerializer). Potrzebuję dostosować serializację, aby spełnić następujące wymagania:NewtonSoft JsonSerializer - Właściwości i słownik małych liter
- nazwy właściwości muszą zaczynać się od małej litery.
- Słownik musi być serializowany do jsonp, gdzie klucze będą używane dla nazw właściwości. Reguła LowerCase nie dotyczy kluczy słownika.
na przykład:
var product = new Product();
procuct.Name = "Product1";
product.Items = new Dictionary<string, Item>();
product.Items.Add("Item1", new Item { Description="Lorem Ipsum" });
musi serializacji do:
{
name: "Product1",
items : {
"Item1": {
description : "Lorem Ipsum"
}
}
}
uprzedzenia że właściwość Name serializes do "nazwa", ale klucz Pozycja1 serializes do słowa "Item1";
Próbowałem stworzyć CustomJsonWriter do serializacji nazw właściwości, ale zmienia się również klucze diction.
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);
}
}
To nie jest naruszenie. Zapewnia mapowanie, które może być konieczne w przypadku serializacji danych. Wynika to z niedopasowania nazw zmiennych C# i bazowego formatu serializacji - nie ograniczając się do JSON. – Metro
cóż, jeśli istnieje reguła lub konwencja, która może być użyta do określenia odwzorowania, to jest to naruszenie DRY – Liero
Zasada DRY jest określona jako "Każda wiedza musi mieć pojedynczą, jednoznaczną, autorytatywną reprezentację w systemie. dowolnego pojedynczego elementu systemu nie wymaga zmiany w innych logicznie niezależnych elementach, a ponadto elementy, które są logicznie powiązane, zmieniają się w sposób przewidywalny i jednolity, a zatem są zsynchronizowane. " – Liero