Acabo de actualizar nuestro Json.NET de la versión 3.5 Versión 7 a la Versión 8 4.0, y me di cuenta de que la separación no se hace de la misma manera. Al serializar un objeto que contiene un diccionario estándar, la versión 3.5 no modificó las claves del diccionario, pero al usar 4.0, el resolver del contrato se aplica también a las claves.CamelCase cambio de rotura en Json.NET versión 4
Por ejemplo, cuando se utilizan los siguientes JsonSerializerSettings:
jsonSerializerSettings = new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new JavaScriptDateTimeConverter() },
NullValueHandling = NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
y cuando la serialización de un objeto como éste:
[JsonObject(MemberSerialization.OptOut)]
public class ProductFilter
{
public int Id { get; set; }
public int NodeId { get; set; }
public IDictionary<string, ProductFilterAttribute> Attributes { get; set; }
}
las teclas en el diccionario Attributes
se convierte en camelCase también. En la versión 3.5R7 aquellos en los que no se modificaron y creo que esa es la forma correcta.
Fragmentos de ejemplo de la salida 3.5R7:
{
"id": 98659,
"nodeId": 317970,
"attributes": {
"FULL_TIME_USE": {
values: [ { "1" } ],
formattedValue: "...
fragmento de ejemplo de la salida 4.0R8:
{
"id": 98659,
"nodeId": 317970,
"attributes": {
"fULL_TIME_USE": {
values: [ { "1" } ],
formattedValue: "...
(Tenemos una gran cantidad de código similar, por lo que la eliminación de la camelCase resolver y añadiendo [JsonProperty("id")]
, [JsonProperty("nodeId")]
etc. no es realmente una opción aquí)
¿Alguna idea de cómo solucionar esto?