2016-01-11 22 views
0

所以我是新來的ASP/.NET/C#遊戲,所以一定會感謝您可能能夠提供給我的任何幫助。我目前有一個名爲「ProjectController.cs」的控制器,它有一個「索引」操作,應該將「項目」列表傳遞給視圖。我已經完成並創建了控制器,操作,API調用和視圖。但是,根據提供的屏幕截圖 - 我遇到了API調用本身的錯誤 - 我試圖將模型列表返回給控制器以傳遞給視圖。我通過從http://10000ft.com api加載JSON響應來完成此操作。任何想法爲什麼我在試圖根據模型創建/驗證新的項目對象時不斷陷入困境?如何將JSON響應綁定到ASP MVC中的模型?

ProjectController.cs:

namespace MVCProject1.Controllers 
{ 
    public class ProjectController : Controller 
    { 
     // GET: Project 
     public ActionResult Index() 
     { 
      List<Models.Project> projects = APICalls.GetAllProjects(); 
      return View(projects); 
     } 
    } 
} 

項目控制器/索引操作查看:

@{ 
    ViewBag.Title = "Project Index"; 
} 
@model IEnumerable<MVCProject1.Models.Project> 

@foreach (var project in Model) 
{ 
    @project.name <br /> 
} 

ProjectModel.cs:

namespace MVCProject1.Models 
{ 
    public class Project 
    { 
     public int id { get; set; } 
     public bool archived { get; set; } 
     public object archived_at { get; set; } 
     public string description { get; set; } 
     public string guid { get; set; } 
     public string name { get; set; } 
     public object parent_id { get; set; } 
     public object phase_name { get; set; } 
     public string project_code { get; set; } 
     public string secureurl { get; set; } 
     public string secureurl_expiration { get; set; } 
     public int settings { get; set; } 
     public int timeentry_lockout { get; set; } 
     public string ends_at { get; set; } 
     public string starts_at { get; set; } 
     public object deleted_at { get; set; } 
     public string created_at { get; set; } 
     public string updated_at { get; set; } 
     public bool use_parent_bill_rates { get; set; } 
     public string thumbnail { get; set; } 
     public string type { get; set; } 
     public bool has_pending_updates { get; set; } 
     public string client { get; set; } 
     public string project_state { get; set; } 

    } 
} 

APICalls.cs:

namespace MVCProject1 
{ 
    public class APICalls 
    { 
     private const string baseUrl = "https://api.10000ft.com/api/v1/{0}?&auth=temp12345=&{1}"; 

     #region PROJECTS 
     public static List<Models.Project> GetAllProjects() 
     { 
      string requestUrl = string.Format(baseUrl, "projects", "&per_page=200"); 

      var resultString = RestClient.makeAPICall(requestUrl); 
      var resultObject = JsonConvert.DeserializeObject(resultString); 

      List<Models.Project> projects = new List<Models.Project>(); 

      foreach (var project in resultObject.data) 
      { 
       projects.Add(project); 
      } 
      return projects; 
     } 
     #endregion 

    } 
} 

RESTClient.cs:

namespace MVCProject1 
{ 
    public static class RestClient 
    { 
     public static string makeAPICall(string requestUrl) 
     { 
      var syncClient = new WebClient(); 
      var content = syncClient.DownloadString(requestUrl); 
      Trace.WriteLine(content.ToString()); 
      return content; 
     } 
    } 

} 

Image of error I'm receiving

+1

occures你做了什麼錯誤? –

+0

在您的問題中包含錯誤的詳細信息,而不是其中的部分圖像。 –

+0

錯誤我收到:類型Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的一個例外發生在System.Core.dll但在用戶代碼中沒有處理 其他信息:關於「的System.Collections中最好重載方法匹配。 Generic.List .List(int)'有一些無效參數 – radiantstatic

回答

0

我認爲你有一個問題與產品列表的反序列化。 嘗試

var projects = JsonConvert.DeserializeObject<List<Models.Project>>(resultString); 

,而不是

var resultObject = JsonConvert.DeserializeObject(resultString); 

List<Models.Project> projects = new List<Models.Project>(); 

foreach (var project in resultObject.data) 
{ 
    projects.Add(project); 
} 

,並檢查projects值不爲空,並沒有錯誤,而反序列化

+0

我會試試這個!我想我唯一的擔心,我上面沒有描述的是,json中與項目模型對齊的實際「項目」位於json響應中的數據對象的下面。看到這個例子響應[鏈接] http://i.imgur.com/6g7r7Xr.png – radiantstatic