读取JSON输出

时间:2017-07-14 05:29:39

标签: c# json

我是C#的新手,我有一个HTTP响应,我通过

转换为json对象
var result = await response.Content.ReadAsStringAsync();
dynamic jsonResponse = JsonConvert.DeserializeObject(result);

当我Debug.WriteLine((object)jsonResponse);现在正在

{
    "status": false,
    "data": 
    {
        "message": "Incorrect Username or Password",
        "name": "Failed Login"
    }
}

这是我所期待的。但问题在于我已经尝试过阅读

if ((object)jsonResponse.status != true){ //throws an error
       ...do stuff
 }

上面的if语句抛出错误

  

操作数!=不能应用于boolean类型和对象

的操作数

通过更改代码并添加

if ((bool)(object)jsonResponse.status != true){ //throws an error
       ...do stuff
 }

以上引发错误

  

无法将类型为NewtonSoft.Json.Linq.Jvalue的对象强制转换为system.boolean

我还需要添加什么?

但是当我跑步时

Debug.WriteLine((object)jsonResponse.status) 

值为真。

我哪里错了?

3 个答案:

答案 0 :(得分:2)

为您的回复添加课程

public class Data
{
    public string message { get; set; }
    public string name { get; set; }
}

public class LoginResponse
{
    public bool status { get; set; }
    public Data data { get; set; }
}

然后将响应转换为类

var response = JsonConvert.DeserializeObject<LoginResponse>(result);

并使用它

if(!response.status){
//do staff
}

答案 1 :(得分:1)

创建类并反序列化对它的响应:

public class Data
{
    public string message {get;set;}
    public string name {get;set;}
}

public class Response
{
    public bool status {get;set;}
    public Data data {get;set;}
}

var jsonResponse = JsonConvert.DeserializeObject<Response>(result);

if (!jsonResponse.status){
   //your code
}

答案 2 :(得分:0)

这不是阅读Json的正确方法。您可以在阅读文件时一个接一个地访问它们。

如下面的代码所示:

{
 "status": false,
 "data": {
      "message": "Incorrect Username or Password",
      "name": "Failed Login"
 }
}

您需要像这样访问它:

JsonObject json = JsonObject.Parse(data);
var statusObject = json.GetNamedBoolean("status");
var dataObject = json.GetNamedObject("data");
var message = dataObject.GetNamedString("message");
var name = dataObject.GetNamedString("name");

// if you need to check whether the `Json` contains the object or not
// check it with
if (dataObject.ContainsKey("message"))
{
    // get the value here as above
}