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;
}
Как в данном случае можно поступить или может есть другие, более удобные методы решения данной задачи? Спасибо.