Имена свойств словаря «Ключ» и «Значение» не сериализуются - PullRequest
0 голосов
/ 24 марта 2020

При сериализации List<KeyValuePair<string, string>> это JSON, которое я получаю:

[
    {
        "Key": "Mineplex",
        "Value": "ULTRA"
    }
]

Однако мне бы хотелось, чтобы оно было key вместо Key и value вместо Value.

Я уже использую JsonNamingPolicy.CamelCase.

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 24 марта 2020

Вы можете попробовать обходной путь здесь, используйте метод Select для создания новой коллекции анонимных объектов с необходимыми именами свойств

var list = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("Mineplex", "ULTRA")
};
var json = JsonSerializer.Serialize(list.Select(l => new { key = l.Key, value = l.Value }));

Вы получите следующее JSON [{"key":"Mineplex","value":"ULTRA"}]

Вы также можете подождать, пока проблема GitHub # 1197 будет исправлена, чтобы получить ожидаемое поведение

1 голос
/ 24 марта 2020

Может быть, использовать следующий класс?

public class JsonLowercaseKeyValuePair<TKey, TValue>
{
    public JsonLowercaseKeyValuePair(TKey key, TValue value)
    {
        Key = key;
        Value = value;
    }

    [JsonPropertyName("key")]
    public TKey Key { get; set; }

    [JsonPropertyName("value")]
    public TValue Value { get; set; }
}
List<JsonLowercaseKeyValuePair<string, string>>
0 голосов
/ 24 марта 2020

Вы можете использовать Newtonsoft следующим образом:

DefaultContractResolver contractResolver = new DefaultContractResolver
{
    NamingStrategy = new CamelCaseNamingStrategy()
    {
        ProcessDictionaryKeys = true
    }
};

var settings = new JsonSerializerSettings
{
    ContractResolver = contractResolver,
    Formatting = Formatting.Indented
};

var json = Newtonsoft.Json.JsonConvert.SerializeObject(dictionaryListData, settings);
...