У меня есть строка json, которую я хочу проанализировать в объекте []:
{ "Thing":"Thing","That":{"Item1":15,"Item2":"Moo","Item3":{"Count":27,"Type":"Frog"}}}
В результате анонимный массив объектов должен содержать каждое из свойств исходного json-объекта. Моя проблема в том, что JsonConvert.DeserializeObject возвращает тип JContainer или JObject. Я не смог определить способ возврата обычного объекта С#.
Это мой текущий нефункциональный код из массива предыдущих попыток. Мне не нужно использовать JSON.net, но я хотел бы, если возможно, обеспечить совместимость с кодом, генерирующим json.
JObject deserialized = JsonConvert.DeserializeObject<JObject>(dataString);
object[] data =
deserialized.Children().Where(x => x as JProperty != null).Select(x => x.Value<Object>()).ToArray();
Обновление
Я использую полученный массив объектов для вызова методов через отражение. Типы анализируемых json-объектов неизвестны во время выполнения. Проблема заключается в том, что типы объектов JObject или JContainer не соответствуют сигнатурам вызываемых методов. Динамический имеет тот же побочный эффект. Вызывается методы следующим образом:
Type _executionType = typeof(CommandExecutionDummy);
CommandExecutionDummy provider = new CommandExecutionDummy();
var method = _executionType.GetMethod(model.Command,
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
if (method == null)
throw new InvalidCommandException(String.Format("Invalid Command - A command with a name of {0} could not be found", model.Command));
return method.Invoke(provider, model.CommandData);