2012-03-13 15 views
8

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?

Respuesta

1

Uhm .. Degradación a una versión que funciona de la manera que desee.

A continuación, presente un informe de error con Json.NET.

2

Hmm: descubrieron que este cambio se realizó entre 4.0R1 y 4.0R2. Here's the issue.

Veo que es correcto desde una perspectiva json, pero no estoy seguro si realmente estoy de acuerdo con el cambio real. Al menos no hacer ese cambio entre dos versiones menores.

También se publica una solución provisional.

Cuestiones relacionadas