Изменения в CamelCase в Json.NET версии 4 - PullRequest
8 голосов
/ 13 марта 2012

Я только что обновил наш Json.NET с версии 3.5 Release 7 до 4.0 Release 8 и понял, что разделение не выполняется таким же образом.При сериализации объекта, который содержит стандартный словарь, версия 3.5 оставила ключи словаря без изменений, но при использовании 4.0 распознаватель контракта также применяется к ключам.

Например, при использовании следующих JsonSerializerSettings:

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

и при сериализации объекта, подобного этому:

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

ключи в словаре Attributes также становятся camelCase.В версии 3.5R7 те, которые остались без изменений, и я думаю, что это правильный путь.

Пример фрагмента из вывода 3.5R7:

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

Пример фрагмента из вывода 4.0R8:

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

(У нас много похожего кода, поэтому удаление разрешения CamelCase и добавление [JsonProperty("id")], [JsonProperty("nodeId")] и т. Д. На самом деле не вариант здесь)

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Хмм - обнаружил, что это изменение было сделано между 4.0R1 и 4.0R2. Вот проблема.

Я вижу, что это правильно с точки зрения json, но я не уверен, действительно ли я согласен с фактическим изменением.По крайней мере, не делать такого изменения между двумя второстепенными версиями.

Обходной путь также размещен там.

1 голос
/ 13 марта 2012

Хм .. Вернитесь к версии, которая работает так, как вы хотите.

Затем отправьте отчет об ошибке в Json.NET.

...