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

问题描述 投票:0回答:3

我做了一个wcf Rest服务,我使用我的mvc应用程序调用服务,Rest服务正常工作并使用HttpClient类通过url(http://localhost:56299/RestService.svc/List)获取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数据我将如何使用它?

c# json rest model-view-controller jsonresult
3个回答
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);

0
投票

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

Json Structure {“GetAllUserResult”:[{“City”:“Pune”,“Name”:“Ranjeet”,“id”:1}]}

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

public List<User> GetAllUserResult { get; set; }

之后,我使用模型对象反序列化json结构

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

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

并使用访问数据

 obj.GetAllUserResult[i].Id;  // i is index 

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


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

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

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.

       }
 }
© www.soinside.com 2019 - 2024. All rights reserved.