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?