2013-03-14 1 views
3

일부 트위터 데이터를 반환하려고하는데 작업을 완료 할 수 없습니다. 나는 위의 코드를 실행하면System.Json.JsonObject 유형에 사용할 기본 생성자를 찾을 수 없습니다.

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); 
      } 
    } 
} 

, 그것은 오류 메시지 내가 가진

유형에 사용할 기본 생성자를 찾을 수 없습니다 System.Json.JsonObject

실패 .NET 4 및 4.5를 사용하여 동일한 오류 메시지가 발생했습니다.

내가 수행해야 할 작업을 설명 할 수 있습니까?

이의 나머지 된 JSONObject는 기본 생성자가 있기 때문입니다 전체 스택 추적을

[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 
+0

'JsonObject'는 (는) 당신이 만든 클래스입니까? –

+0

아니요, System.Json의 일부입니다. – Dave

답변

3

가 포함되어 있습니다. here을 참조하십시오.

System.Json 대신 Newtonsoft.Json (AKA "JSON.NET"in nuget)을 사용하는 것이 좋습니다.

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); 
     } 
    } 
} 
+0

고맙습니다.하지만 Deserialize를 사용할 수는 없습니다. "Newtonsoft.Json.JsonConvert '에'Deserialize '* 정의가 없습니다. 나는 그것이 DeserializeObject이어야한다고 생각한다? – Dave

+0

예, DeserializeObject ()입니다. 그게 하나야. –

+0

Ray, 코드 중 일부가 올바르게 작동하지 않았지만 (올바른 답을 주었음에도 불구하고) 작동 예제로 업데이트했습니다. 괜찮 으면합니다. – Dave

관련 문제