【发布时间】:2020-01-17 20:08:09
【问题描述】:
我正在尝试反序列化来自 CouchBase 的 JSON 响应。但是,反序列化会引发异常。
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": "[]", ...}}
【问题讨论】:
-
不能反序列化成接口。你必须指定一个具体的实现,比如
List<T>。 -
adLis 应该是一个集合吗?如果是这样 JSON/ 你的模型是错误的。发布您的模型。
-
在此处查看答案:stackoverflow.com/questions/41266503/… 该行对象可能已经是 JObject。
-
@newprint 你确定变量 row 是一个字符串吗?如果不是,您将从 newtonsoft json 收到错误。请验证该行实际上是一个字符串
-
@newprint 您正在动态调用 JsonConvert.DeserializeObject
。这在编译时不会失败,但在运行时会抛出,因为该方法的动态绑定失败(该方法需要一个字符串,但您传递的对象不是字符串)
标签: c# json asp.net-core json.net couchbase