Как работать с интерфейсом, который наследует IDictionary и установить десериализованный тип возвращаемого объекта в качестве этого интерфейса - PullRequest
0 голосов
/ 15 марта 2019

Здесь у меня есть один интерфейс, который наследует IDictionary, и я хочу получить тип возврата этого интерфейса

  1. Класс интерфейса

using System.Collections.Generic;

public interface IClientSettings : IDictionary<string, string>
{

}
Кодовая часть метода, где jsondata была десериализована в список словаря

if (result.StatusCode == HttpStatusCode.OK)
{
    DashboardJsonConverter jsonConverter = new DashboardJsonConverter();
    var keyValues = jsonConverter.DeserializeClientSettings(jsonData); //desrialize obj
    result.Dispose();//dispose response
    return (IClientSettings)keyValues;
}
Метод десериализации

public List<Dictionary<string, string>> DeserializeClientSettings(string json)
{
    return JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(json);
}

1 Ответ

0 голосов
/ 15 марта 2019

В системе типов C # нет способа безопасно понижать один тип до другого.

List<Dictionary<string, string>> не знает IClientSettings, поэтому вы не можете наложить этот тип на него. Вам нужно будет создать конкретный тип, который действительно реализует этот интерфейс, и создать способ создания этого типа из List<Dictionary<string, string>>. То, что вы могли бы сделать, это создать тип «адаптера», который переносит List<Dictionary<string, string>> и проходит через любой вызов метода к базовому типу.

...