Я только что обновил наш 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")]
и т. Д. На самом деле не вариант здесь)
Есть идеи, как решить эту проблему?