Unable to find a default constructor to use for type System.Json.JsonObject

匿名 (未验证) 提交于 2019-12-03 08:57:35

问题:

I'm trying to return some twitter data, but I am not able to complete my task.

using System.Collections.Generic; using System.Json; using System.Linq; using System.Net.Http; using System.Web.Mvc; using Demo.Models;  namespace Demo.Controllers {     public class HomeController : Controller     {     public ActionResult Index()             {                 var model = new List<Tweets>();                 var client = new HttpClient();                 var task =                     client.GetAsync("http://search.twitter.com/search.json?q=dave").ContinueWith((taskWithMessage) =>                         {                             var response = taskWithMessage.Result;                             var jsonTask = response.Content.ReadAsAsync<JsonObject>();                             jsonTask.Wait(); //THIS IS WHERE THE FAULT IS                              var jsonObject = jsonTask.Result;                             model.AddRange(                                 (from JsonObject jo in jsonObject["results"]                                  select new Tweets                                      {                                          Name = jo["from_user"].ToString(),                                          Text = jo["text"].ToString()                                      }                                 ));                         });                  task.Wait();                 return View(model);             }     } } 

When I execute the above code, it fails with the error message

Unable to find a default constructor to use for type System.Json.JsonObject

I have experienced the same error message using .NET 4 and 4.5

Can any one explain what I need to do please?

The rest of this contains the full stack trace

[JsonSerializationException: Unable to find a default constructor to use for type System.Json.JsonObject. Path 'completed_in', line 1, position 16.]   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewDictionary(JsonReader reader, JsonDictionaryContract contract) +234 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +810          Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) +184 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) +793 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) +1143 Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) +46 System.Net.Http.Formatting.<>c_DisplayClass8.b_6() +950 System.Threading.Tasks.TaskHelpers.RunSynchronously(Func`1 func, CancellationToken cancellationToken) +143       [AggregateException: One or more errors occurred.] System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +3548265 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) +10487717 System.Threading.Tasks.Task.Wait() +10 Demo.Controllers.<>c_DisplayClass3.b_1(Task1 taskWithMessage) in c:\Users\Dave\Documents\Visual Studio 2012\Projects\Demo\Demo\Controllers\HomeController.cs:22 System.Threading.Tasks.ContinuationTaskFromResultTask1.InnerInvoke() +80 System.Threading.Tasks.Task.Execute() +49        [AggregateException: One or more errors occurred.] System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +3548265 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) +10487717 System.Threading.Tasks.Task.Wait() +10 Demo.Controllers.HomeController.Index() in c:\Users\Dave\Documents\Visual Studio 2012\Projects\Demo\Demo\Controllers\HomeController.cs:35 lambda_method(Closure , ControllerBase , Object[] ) +101 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +211 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +27 System.Web.Mvc.Async.<>c_DisplayClass42.b_41() +28 System.Web.Mvc.Async.<>c_DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) +10 System.Web.Mvc.Async.WrappedAsyncResult1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +48 System.Web.Mvc.Async.<>c_DisplayClass39.b_33() +57 System.Web.Mvc.Async.<>c_DisplayClass4f.b_49() +223 System.Web.Mvc.Async.<>c_DisplayClass37.b_36(IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResult1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +48 System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24 System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102 System.Web.Mvc.Async.WrappedAsyncResult1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43 System.Web.Mvc.<>c_DisplayClass1d.b_18(IAsyncResult asyncResult) +14 System.Web.Mvc.Async.<>c_DisplayClass4.b_3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult1.End() +62 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult1.End() +62 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47     System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c_DisplayClass8.b_3(IAsyncResult asyncResult) +25 System.Web.Mvc.Async.<>c_DisplayClass4.b__3(IAsyncResult ar) +23 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9     System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629708 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

回答1:

This is because JsonObject has no default constructor. See here.

I would recommend using Newtonsoft.Json (AKA "JSON.NET" in nuget) instead of System.Json.

using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Web.Mvc; using Newtonsoft.Json.Linq; using PayPoint.Models; using System.Threading.Tasks;  namespace PayPoint.Controllers {     public class HomeController : Controller     {         public ActionResult Index()         {             var model = new List<Tweets>();             const string webUri = "http://search.twitter.com/search.json?q=dave";              var client = new HttpClient();             var tweetTask = client.GetAsync(webUri);             Task<JObject> jsonTask = tweetTask.Result.Content.ReadAsAsync<JObject>();             var results = jsonTask.Result;              model.AddRange((from b in results["results"]                      select new Tweets()                          {                              Name = b["from_user"].ToString(),                              Text = b["text"].ToString()                          }).ToList());              return View(model);         }     } } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!