Search code examples
c#.netredisjson-deserializationstackexchange.redis

How do I fix " (Variable name here) is a variable but is used like a type?"


So I have a method that accepts an argument to provide the type, and I want to pass in this type into a deserialization of some data that I am getting back from Redis Cache. But it says "(variable name) is a variable but is used as a type". Does anyone know how to fix this?

protected async Task<BaseModel> GetData<T>(string id, Type modelType) {

    var data = await this.cacheDatabase.StringGetAsync(key).ConfigureAwait(false);
    var response = JsonConvert.DeserializeObject<modelType>(data); // error here
    return response;

}

If I hardcode the model type in the deserialization, it works perfectly, but of course this is not ideal since I would like this method to handle various different model types. See below for the working code.

protected async Task<BaseModel> GetData<T>(string id) {

    var data = await this.cacheDatabase.StringGetAsync(key).ConfigureAwait(false);
    var response = JsonConvert.DeserializeObject<Dog>(data); // works fine as Dog is a child class of BaseModel.
    return response;

}

Solution

  • JsonConvert.DeserializeObject has an overload which accepts a value of type Type as a second argument. So you could try this:

    var response = JsonConvert.DeserializeObject(data, modelType);
    

    And there's no need for the T type parameter at all.