如何将从rest api中获取的json数据从控制器传递到视图?

时间:2017-07-19 09:44:51

标签: c# json rest model-view-controller jsonresult

我做了一个wcf Rest服务,我使用我的mvc应用程序调用服务,Rest服务正常工作,并通过url http://localhost:56299/RestService.svc/List使用HttpClient类获取json数据,但无法访问控制器中的数据并传递给视图。

代码: -

{
 *string apiurl = "http://localhost:56299/RestService.svc/List";

HttpClient client = new HttpClient();

client.BaseAddress = new Uri(apiurl);

 client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


HttpResponseMessage response = await client.GetAsync(apiurl);

var users = response.Content.ReadAsStringAsync().Result;

var obj = JsonConvert.DeserializeObject(users);*
}

我以json格式成功获取var obj中的数据但是我无法在变量obj中返回json数据我将如何使用它?

3 个答案:

答案 0 :(得分:0)

以下代码行,将您的json字符串反序列化为object

var obj = JsonConvert.DeserializeObject(users);

相反,您应该将其反序列化为特定的模型或对象,并将其作为模式发送到您的视图中(假设您将定义一个名为User的类与返回的JSON结构匹配)

var model = JsonConvert.DeserializeObject<User>(users); 
return view(model);

根据您发布的JSON结构{"City":"bkn","Name‌​":"Mohit","id":5},您应该创建一个模型,如下所示

public class User
{
  [jsonProperty(Name="Id")]
  public int id {get; set;}
  public string Name {get; set;}
  public string City {get; set;}
}

然后您可以将其反序列化为IEnumerable<User>

var model = JsonConvert.DeserializeObject<List<User>>(users); 
return view(model);

答案 1 :(得分:0)

为解决此问题,主要问题是在模型中声明的对象名称,以访问json。

Json Structure {&#34; GetAllUserResult&#34;:[{&#34; City&#34;:&#34; Pune&#34;,&#34; Name&#34;:&#34 ;兰吉特&#34;&#34; ID&#34;:1}]}

为此,我创建了一个List类型的User,它是模型类,名为GetAllUserResult,它是包含所有数据的json结构的名称。

$watchlisticoncolor

之后我使用模型对象

反序列化了json结构
public List<User> GetAllUserResult { get; set; }

使用

访问数据
var users = response.Content.ReadAsStringAsync().Result;

User obj = JsonConvert.DeserializeObject<User>(users);

并在列表中获取该数据并传递给视图

答案 2 :(得分:0)

这是我的方式。你可以咨询

班级模型

public class CheckStatusModel
{
    public int OBJID { get; set; }
    public string SUPID { get; set; }
    public string STATUSPTC { get; set; }  
    public int DATEACTIVESUP { get; set; }
}

  public class CheckStatus
{
    public List<CheckStatusModel> Data { get; set; } // data is an array so this needs to be some kind of collection
    public string StatusCode { get; set; }
}

**发送使用查找web api REST服务资源的请求 HttpClient的****

using (var client = new HttpClient())
{
     client.BaseAddress = new Uri(Baseurl);
     client.DefaultRequestHeaders.Clear();
     client.DefaultRequestHeaders.Accept.Add(new 
     MediaTypeWithQualityHeaderValue("application/json"));
     HttpResponseMessage response = await client.PostAsJsonAsync("api/RPDeployment/BIL_CFP_BOX_CHECK_STATUSPTC", checkStatusParam);
     if(response.IsSuccessStatusCode)
       {
            var EmpResponse = response.Content.ReadAsStringAsync().Result;
            ListStatusPTC = JsonConvert.DeserializeObject<CheckStatus>(EmpResponse); // the JSON contains an object, so this needs to deserialize to an object. you can't deserialize to a list.

       }
 }