Чтобы получить желаемый результат, Components
должно быть Dictionary<string, string>
, а не List<KeyValuePair<string, string>>
. Таким образом, самое простое решение - изменить свой класс таким образом:
public class Incident
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("components")]
public Dictionary<string, string> Components { get; set; }
public Incident()
{
Components = new Dictionary<string, string>();
}
}
Fiddle: https://dotnetfiddle.net/Mx4Z8U
Конечно, недостатком этого решения является то, что вы теперь нужно обновить весь код, который использует Incident
для работы с Dictionary
вместо List
. В зависимости от того, сколько существует зависимостей, вы можете или не хотите делать это.
Итак, второе простейшее решение - создать суррогатное свойство Dictionary<string, string>
в классе, который использует List<KeyValuePair<string, string>>
в качестве своего источник данных. Это может быть приватно, если хотите. Переместите атрибут [JsonProperty("components")]
на новый Dictionary
и пометьте List<KeyValuePair<string, string>>
вместо [JsonIgnore]
. Таким образом, у вас будет это:
public class Incident
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonIgnore]
public List<KeyValuePair<string, string>> Components { get; set; }
[JsonProperty("components")]
private Dictionary<string, string> ComponentDictionary
{
get { return Components != null ? new Dictionary<string, string>(Components) : null; }
}
public Incident()
{
Components = new List<KeyValuePair<string, string>>();
}
}
Скрипка: https://dotnetfiddle.net/Po22Yt