Não vejo problemas além do compilador pensar que eu não deveria fazer isso. C # não pode herdar de mais de uma classe base, que chatice quando você está acostumado a fazer isso, frontalmente você pode fazer várias interfaces, então eu abusei disso para obter os recursos de que preciso ;-)
Você deve verificar se há null, etc., no entanto, aqui está uma versão simplificada que implementa o Parse para obter uma classe de um serviço da web ou banco de dados
public interface IParse<T>
{
static T Parse(string text)=>JsonConvert.DeserializeObject<T>(text, settings:new JsonSerializerSettings() { ConstructorHandling= ConstructorHandling.AllowNonPublicDefaultConstructor });
static T Parse(string text, JsonSerializerSettings settings) =>JsonConvert.DeserializeObject<T>(text, settings);
}
Então, apenas chamo a interface no código que possui List como o valor de retorno.
Aqui está um recorte em que li JSON do banco de dados, preenchendo-o para um tipo que tem Json implementado
using (var reader = cmd.ExecuteReader(behavior: CommandBehavior.CloseConnection | CommandBehavior.SingleResult))
{
if (reader.HasRows)
{
while (reader.Read())
{
rows++;
try
{
var json = reader.GetString(0);
result.Add(IParse<T>.Parse(json));
}
catch
{
failed++;
}
}
}
}
Com> ver versão 8 você tem a implementação padrão, então "a caixa de Pandora está aberta"