Десериализовать Json в динамический объект с помощью ServiceStack.Text
Я использую ServiceStack.Text для десериализации JSON в динамический объект.
Я сталкиваюсь с ошибкой при попытке десериализации следующего json:
{
"responseHeader":{
"status":0,
"QTime":3,
"params":{
"q":"*:*",
"indent":"true",
"wt":"json"}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"1",
"title":["test"],
"_version_":1480260331707039744}]
}}
JSON выше - это строка, и вот как я пытаюсь ее десериализовать:
DynamicJson dyn = DynamicJson.Deserialize(json);
var response = dyn.response;
Но я получаю сообщение об ошибке: dyn не содержит определения "ответа"
dyn
возвращает тип ServiceStack.DynamicJson
со следующим значением (из отладчика):
{"response_header":"{\n \"status\":0,\n \"QTime\":0,\n \"params\":{\n \"q\":\"*:*\",\n \"size\":\"0\",\n \"indent\":\"True\",\n \"start\":\"0\",\n \"wt\":\"json\",\n \"return-fields\":\"\"}}","response":"{\"numFound\":1,\"start\":0,\"docs\":[\n {\n \"id\":\"1\",\n \"title\":[\"test\"],\n \"_version_\":1480260331707039744}]\n }"} ServiceStack.DynamicJson
В соответствии с ответом здесь: Использование ServiceStack.Text для десериализации строки json для объекта - вот как это делается, но что я здесь делаю неправильно?
1 ответ
Даже если DynamicJson.Deserialize
на самом деле возвращает экземпляр DynamicJson
, ты должен объявить dyn
как dynamic
лечить это динамически:
dynamic dyn = DynamicJson.Deserialize(json);
var response = dyn.response;
Согласно документации для DynamicObject
(который DynamicJson
наследует от):
В C# для включения динамического поведения для экземпляров классов, производных от класса DynamicObject, необходимо использовать ключевое слово dynamic.
Если выражение не имеет типа dynamic
статическое связывание все равно будет происходить, поэтому вы видите ошибку.