2012-03-13 35 views
8

Tôi vừa nâng cấp Json.NET từ phiên bản 3.5 Release 7 lên 4.0 Release 8, và nhận ra rằng việc seralization không được thực hiện theo cách tương tự. Khi tuần tự hóa một đối tượng có chứa từ điển chuẩn, phiên bản 3.5 để lại các phím từ điển không thay đổi, nhưng khi sử dụng 4.0, trình giải quyết hợp đồng cũng áp dụng cho các phím.Thay đổi đột phá CamelCase trong phiên bản Json.NET 4

Ví dụ, khi sử dụng JsonSerializerSettings sau:

jsonSerializerSettings = new JsonSerializerSettings 
{ 
    Converters = new List<JsonConverter> { new JavaScriptDateTimeConverter() }, 
    NullValueHandling = NullValueHandling.Ignore, 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore, 
    ContractResolver = new CamelCasePropertyNamesContractResolver() 
}; 

và khi tuần tự một đối tượng như thế này:

[JsonObject(MemberSerialization.OptOut)] 
public class ProductFilter 
{ 
    public int Id { get; set; } 
    public int NodeId { get; set; } 
    public IDictionary<string, ProductFilterAttribute> Attributes { get; set; } 
} 

các phím trong từ điển Attributes trở thành camelCase là tốt. Trong phiên bản 3.5R7 những nơi không thay đổi và tôi nghĩ đó là cách chính xác.

Đoạn mã từ đầu ra 3.5R7:

{ 
    "id": 98659, 
    "nodeId": 317970, 
    "attributes": { 
     "FULL_TIME_USE": { 
      values: [ { "1" } ], 
      formattedValue: "... 

Đoạn mã từ đầu ra 4.0R8:

{ 
    "id": 98659, 
    "nodeId": 317970, 
    "attributes": { 
     "fULL_TIME_USE": { 
      values: [ { "1" } ], 
      formattedValue: "... 

(Chúng tôi có rất nhiều mã tương tự, vì vậy loại bỏ các camelCase giải quyết và thêm [JsonProperty("id")], [JsonProperty("nodeId")] vv không thực sự là một tùy chọn ở đây)

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

Trả lời

1

Uhm .. Hạ cấp xuống phiên bản hoạt động theo cách bạn muốn.

Sau đó gửi báo cáo lỗi với Json.NET.

2

Hmm - phát hiện ra rằng thay đổi này được thực hiện giữa 4.0R1 và 4.0R2. Here's the issue.

Tôi có thể thấy rằng nó chính xác từ góc độ json, nhưng tôi không chắc liệu tôi có thực sự đồng ý với thay đổi thực sự hay không. Ít nhất không thực hiện một sự thay đổi như vậy giữa hai phiên bản nhỏ.

Cách giải quyết cũng được đăng ở đó.

Các vấn đề liên quan