JsonConvert.DeserializeObject генерирует исключение при десериализации ответа CouchBase - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь десериализовать JSON ответ от CouchBase. Однако десериализация создает исключение.

            IQueryRequest queryRequest = QueryRequest.Create(queryString);
            queryRequest.ScanConsistency(ScanConsistency.RequestPlus);
            var queryResult = await bucket.QueryAsync<dynamic>(queryRequest);

            if (!queryResult.Success)
            {
            }

            foreach (var row in queryResult.Rows)
            {
                try
                {
                    var registrationDetails = JsonConvert.DeserializeObject<IEnumerable<RegistrationModel>>(row);
                    //var registrationDetail1 = JsonConvert.DeserializeObject<RegistrationModel>(row);
                }
                catch (Exception Ex)
                { }

            }

Исключение, которое я получаю:

{Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: The best overloaded method match for 'Newtonsoft.Json.JsonConvert.DeserializeObject<System.Collections.Generic.IEnumerable<MC4B_CommonInterface.RegistrationModel>>(string)' has some invalid arguments
   at CallSite.Target(Closure , CallSite , Type , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at DataAccess.Services.RegistrationDataServices.ActivateSimpleRegistrations(ActivateRequest request) ...}

Ответ от Couchbase прост. RegistrationModel имеет все атрибуты JsonProperty.

[
  {
    "acsPntDocId": "",
    "adLis": "[]",
    "adP2DNa": "CA",
     .....
    }
]

Одна вещь, которую я заметил, это foreach (var row in queryResult.Rows), row содержит {{"acsPntDocId":"","adLis": "[]", ...}}

1 Ответ

1 голос
/ 18 января 2020

Исходя из строкового результата, который вы разместили в конце вопроса, возможно, что row уже является объектом JObject. Исходя из этого поста { ссылка } кажется, что добавление .ToString() к объекту задания перед его десериализацией может помочь вам.

Например:

string rowString = row.ToString();
var registrationDetails = JsonConvert.DeserializeObject<IEnumerable<RegistrationModel>>(rowString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...