Работа с Абстракцией. Нужна помощь

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Начал изучать абстракции и зашел в тупик, не понимаю, как реализовать.
Есть задача написать Proxy Server для работы с разными сервисами.

Нужно написать абстрактное решение, которое будет парсить данные Json от разных прокси сервисов.
У меня не получается подключить абстракцию, которая будет парсить Json данные под нужные сервисы.

Есть абстрактный метод, который принимает данные string Json, парсит их и отдает список List<IProxyJson>.
public abstract List<IProxyJson> ParseJson(string proxyJson);

Создал интерфейс с базовыми данными, которые хочу получить:
C#:
public interface IProxyJson
{
    string Host { get; set; }
    string Port { get; set; }
    string User { get; set; }
    string Pass { get; set; }
    string Country { get; set; }
}
Реализую данный интерфейс для первого сервиса и дописываю дополнительные данные, которые хочу получить конкретно от этого сервиса
C#:
public class Proxy6Json : IProxyJson
    {
        public string Host { get; set; }
        public string Port { get; set; }
        public string User { get; set; }
        public string Pass { get; set; }
        public string Country { get; set; }

        public string Id { get; set; }
        public string Date_end { get; set; }
        public string Unixtime_end { get; set; }
        public string Descr { get; set; }
        public string Active { get; set; }

    }
Теперь вопрос, как мне его завести в абстрактном методе public abstract List<IProxyJson> ParseJson(string proxyJson);

//КОД НЕРАБОЧИЙ! как сделать его рабочим? :-)
C#:
public override List<IProxyJson> ParseJson(string proxyJson)
{
    var objProxy = JObject.Parse(proxyJson);
    IList<JToken> results = objProxy.SelectTokens("list").Children().Children().ToList();

    var proxyList = new List<Proxy6Json>();
    foreach (var result in results)
    {
        var jsonProxy6 = result.ToObject<Proxy6Json>();
        proxyList.Add(jsonProxy6);
    }

    return proxyList;
}
Ошибка CS0029 Не удается неявно преобразовать тип "System.Collections.Generic.List<ProxyService.ProxyJson.Proxy6Json>" в "System.Collections.Generic.List<ProxyService.ProxyJson.IProxyJson>".
 

Carty

Client
Регистрация
16.06.2021
Сообщения
39
Благодарностей
68
Баллы
18
1. return proxyList.Cast<IProxyJson>();

2.
C#:
public override List<IProxyJson> ParseJson(string proxyJson)
{
    var objProxy = JObject.Parse(proxyJson);
    IList<JToken> results = objProxy.SelectTokens("list").Children().Children().ToList();

    var proxyList = new List<IProxyJson>();
    //                       ^^^^^^^^^^
    foreach (var result in results)
    {
        var jsonProxy6 = result.ToObject<Proxy6Json>();
        proxyList.Add(jsonProxy6);
    }

    return proxyList;
}
 
  • Спасибо
Реакции: Dmitriy Ka

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
1. return proxyList.Cast<IProxyJson>();

2.
C#:
public override List<IProxyJson> ParseJson(string proxyJson)
{
    var objProxy = JObject.Parse(proxyJson);
    IList<JToken> results = objProxy.SelectTokens("list").Children().Children().ToList();

    var proxyList = new List<IProxyJson>();
    //                       ^^^^^^^^^^
    foreach (var result in results)
    {
        var jsonProxy6 = result.ToObject<Proxy6Json>();
        proxyList.Add(jsonProxy6);
    }

    return proxyList;
}
Не помогло, возвращаются данные которые находятся в интерфейсе, а дополнительные данные конкретного прокси сервиса не возвращаются.
Не понимаю, как реализовать лист так, чтобы в нем можно было менять типы данных
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)