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.