Я пытаюсь обдумать, как типы и обобщенные c методы работают с Newtonsoft.Json
.
У меня есть следующий пример базового класса:
public class Foo
{
public Type Expected;
public object Result;
public Foo()
{
Expected = typeof(RootObject);
}
public void Process()
{
string json = @"{
'Foo': 'oof',
'Baz': 0,
'Bar': [
'Yeet',
'Skeet'
]
}";
Result = JsonConvert.DeserializeObject<Expected>(json); // -> doesnt work
}
}
Я планирую при вызове метода Process()
из производного класса после того, как я мог изменить тип класса Expected
.
Однако, как этот вопрос указывает на то, что я обнаружил после небольшого исследования, передавая переменную Напечатайте метод generi c не так просто. Посмотрев немного подробнее, я обновил уязвимую строку так:
Result = ((Func<string, object>)JsonConvert.DeserializeObject).Method.MakeGenericMethod(Expected).Invoke(null, new object[]{json});
Это работает! • ᴗ •
Но результирующая переменная все еще является простой object
, с которой довольно трудно справиться. Я пытался привести результат к типу Expected
, но он просто не позволил мне.
Result = (Expected)((Func<string, object>)JsonConvert.DeserializeObject).Method.MakeGenericMethod(Expected).Invoke(null, new object[]{json});
говорит мне, что тип или пространство имен Expected
не может быть найдено. В качестве более наивного подхода я попытался объявить свою собственность Result
примерно так:
public Expected Result;
, но мои мечты не сбылись.
Я не уверен, как мне дальше подходить к этому получите объект Result
типа Expected
, чтобы я мог легко получить доступ к его свойствам или, если есть лучший способ go об этой проблеме типа-переменной-generi c -метода в целом.
У меня полная (примерная) разметка на dotnetfiddle , спасибо, что нашли время!