C# Вложенные обобщения в ковариации

нужно десериализовать json в определенные классы(контейнеры), в зависимости от того, какой класс будет использовать эти десериализованные данные. И это я пытаюсь сделать через ковариацию и использование вложенных обобщений. Но столкнулся с проблемой вложенных обобщений. Вот пример кода:

public class BaseUsing {
    protected ISimpleParser<BaseContainer<BaseResult<NextBaseResult>>> _parser;
    protected virtual void Init() {}
}

public class UsingA : BaseUsing {
    protected override void Init()
    {
        //Передать нужные контейнеры и в дальнейшем 
        //использовать как базовые так и текущие значения контейнеров
        _parser = new SimpleParser<UsingA_Container>();//Ошибка, "невозможно преобразовать тип"
    }

    public void SomeFunc1()
    {
        int o = _parser.GetData.br.nbr.baseval2;
        int м = _parser.GetData.br.nbr.usingval2; //Ошибка, виден только базовые контейнеры
    }
}
public interface ISimpleParser<out T>
{
    T GetData { get; }
}
public class SimpleParser<T> : ISimpleParser<T> {
    private T _data;

    public void Parse(string json) {
        _data = JsonConvert.DeserializeObject<T>(json);
    }
    public T GetData => _data;
}

public class BaseContainer<BaeResultType> {
    public int baseval;
    public BaeResultType br;
}
public class BaseResult<NextBaeResultType> {
    public int baseval1;
    public NextBaeResultType nbr;
}
public class NextBaseResult {
    public int baseval2;
}

public class UsingA_Container : BaseContainer<UsingA_Result>
{
    public int usingval;
}
public class UsingA_Result : BaseResult<UsingA_NextResult>
{
    public int usingval1;
}
public class UsingA_NextResult : NextBaseResult
{
    public string usingval2;
}

Как в данном случае можно поступить или может есть другие, более удобные методы решения данной задачи? Спасибо.


Ответы (0 шт):