JsonSerialization y Key Dictionaries —Sobreescritura de la configuración
Problema inicial
El backend estaba retornando un diccionario donde las keys eran camelCase
. Mientras que frontend estaba esperando que sean UPPERCASE
para mantener uniformidad con data existente.
Investigación
Efectivamente, la configuración global de cómo serializar objetos a JSON
indicaba que todas las propiedades tenían que ser camelCase
.
Existen algunos atributos que con los que se puede marcar una propiedad para que al momento de serializarla tome dicha configuración.
[JsonProperty(NamingStrategyType=typeof(SnakeCaseNamingStrategy), NamingStrategyParameters = new object [] { false, false } )]
public object PropertyToBeSerialize { get; set; }
Donde el primer parámetro corresponde al seteo de la propiedad OverrideSpecifiedNames
y el segundo a ProcessDictionaryKeys
.
Desafortunadamente, este atributo sólo aplica a la property misma y no a las property names de sus ítems.
Solución
Para poder aplicar un naming strategy a los ítems es necesario crear una subclase que herede de Dictionary<TKey, TValue>
y aplicar el atributo a la nueva clase creada.
[JsonDictionary(NamingStrategyType = typeof(DefaultNamingStrategy))]
public class OurCustomSerializationDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
}
En este repositorio de Github podrán encontrar un ejemplo de la situación descripta.