Я немного озадачен использованием ключевого слова "объект" в C#. Что может и не может быть использовано для этого. Можете ли вы получить доступ к члену?
C# по умолчанию является статически типизированным языком . То есть, если у вас есть выражение определенного типа времени компиляции, вы можете получить доступ только к членам этого типа. Это система безопасности; он говорит: «У меня есть только гарантия, что члены этого типа доступны, поэтому не позволяйте мне получать доступ к любым другим членам».
Если у вас есть выражение типа object
, вы можете получить доступ к членам из object
- ToString
, GetType
и т. д.
Если вы хотите отключить эту систему безопасности, используйте dynamic
вместо object
, и тогда вы сможете позвонить любому участнику тебе нравится; если вы позвоните участнику, который не существует, ваша программа выполнит запрос sh. Когда вы выключаете систему безопасности, система безопасности выключается, и вы становитесь ответственным за обеспечение безопасности .
ПОЯСНЕНИЕ: Комментатор Брайан правильно указывает, что в спецификации c В случае JSON объектов поведение по умолчанию для плохого динамического доступа c к элементу - создание нулевого значения, а не сбой; конечно, большую часть времени после создания нуля, потому что член неожиданно отсутствует, следующая вещь, которая произойдет, это нулевая разыменование cra sh, так что на самом деле там не так много дополнительного запаса прочности, но есть по крайней мере некоторые.
Мой вопрос к вам был:
Если вы позвоните GetType().ToString()
на объекте, что вы получите?
Ответ был Newtonsoft.Json.Linq.JObject
. Таким образом, в этом случае вы можете получить доступ к членам этого типа следующим образом:
JObject jo = (JObject)testObject;
(при условии, что в ваших директивах есть using Newtonsoft.Json.Linq;
).
Опять ваша программа обработает sh если объект на самом деле не относится к этому типу.
Вы можете выполнить безопасный тип теста с помощью:
if (testObject is JObject jo)
{
var r = jo.Root;
...
Я стараюсь не делать десятки классов.
C# is статически типизированный язык; это поощряет создание классов. Опять же, это система безопасности. Инвестируйте в его правильное использование!