Как десериализовать модель для ее типа, если указан тип - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь написать функцию, которая принимает сериализованный объект json (который соответствует классу определения объекта (модель)) и получает тип, десериализует его в эту модель. Есть несколько моделей, .. в приведенном ниже коде я использую TCustomerModel (просто класс свойств)

Из моего API-интерфейса я хочу вызвать эту функцию, передать ее json объект, который соответствует одной из моих моделей, а также передает ему ModelType (т.е. в данном случае TCustomerModel Пока что то, что я видел или пробовал, не работает.

как простой пример. (Это работает, .. но я хочу функцию, которая может сделать это, просто передав ему тип и не создавая явно myModel для каждого типа).

 TCustomerModel   myModel = JsonConvert.DeserializeObject<TCustomerModel>(jsonModel);

Код :

public class DeserializeModelValidator
{
    public Object ValidateModel (Type objectType, object theModel)
    {
        objectModel = JsonConvert.DeserializeObject<theModel>, typeof(objectType));
        // etc
    }
}

Телефонный код: (из API)

DeserializeModelValidator validator = new DeserializeModelValidator();
validator.ValidateModel(typeof(TCustomerModel), objectModel);

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я нашел это, который работает. Теперь все, что мне нужно, это способ использования переменной Type для создания экземпляра класса этого типа. например, useType CLasstype = new useType ();

, но это другой вопрос.

public object DeserializeModelr(string value, Type useType, params JsonConverter[] converters)
{
    var result = JsonConvert.DeserializeObject( value, useType,  converters);
    dynamic DataModel = Convert.ChangeType(result, useType);

    etc
}
0 голосов
/ 28 апреля 2020

Для этого вы можете создать обобщенный c метод расширения.

public static class DeserializeModelValidator
{
    public static T ValidateModel<T>(this string serializedJson)
    {
        var result = JsonConvert.DeserializeObject<T>(serializedJson);
        // etc
        return result;
    }
}

Вы бы назвали метод расширения следующим образом:

var myModel = jsonModel.ValidateModel<TCustomerModel>();
...