2017-07-19 105 views
0

我做了一个wcf休息服务,并且使用我的mvc应用程序调用了服务,其余服务正常工作,并通过使用HttpClient类的url http://localhost:56299/RestService.svc/List获取json数据,但无法访问控制器中的数据并传递到视图。如何通过json从控制器的其余api获取数据来查看?

代码: -

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

我在VAR OBJ成功地获得的数据以JSON格式,但进一步的我无法OBJ如何我将使用变量返回的JSON数据?

+0

你必须创建模型视图,反序列化的Web API REST服务资源json数据添加到此模型并将其传递到您的视图。显示json结构来帮助你更好 –

+0

我做到了,但是这样做只返回一条记录,属性值为null,但用户有多条记录 – niteshkumarmodi

+0

Json Structure {“GetAllUserResult”:[{“City”:“Pune”, “名称”: “兰吉特”, “ID”:1},{ “城市”: “孟买”, “姓名”: “阿密特”, “ID”:2},{ “城市”: “斋浦尔”,“名称“:”Nitesh“,”id“:3},{”City“:”bkn“,”Name“:”Mohit“,”id“:5}]} – niteshkumarmodi

回答

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

我仍然没有收到所有记录,返回只有一个记录 – niteshkumarmodi

+0

@niteshkumarmodi,请参阅如果有帮助编辑 – Rahul

+0

我无法解析引用jsonProperty @Rahul – niteshkumarmodi

0

为了解决这个问题,主要问题是,在模型中声明的访问JSON对象的名称。

JSON结构{ “GetAllUserResult”:[{ “城市”: “浦”, “姓名”: “兰吉特”, “ID”:1}]}

为此,我做了一个作为模型类的User的列表类型,名为GetAllUserResult,它是我的json结构的名称,它保存所有数据。

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

后,我用使用

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

,并获得在列表中的数据,并通过模型对象

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

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

和访问数据,查看

0

这是反序列化JSON结构我的方式。您可以咨询

级车型

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 ****

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. 

     } 
} 
相关问题