Критическое изменение CamelCase в Json.NET версии 4

Я только что обновил наш 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")]и т.д. здесь не вариант)

Есть идеи, как это решить?

8
задан mikaelnet 13 March 2012 в 13:01
поделиться