在C#中从JSON文件中访问单个值

4
我的json文件大致如下所示:
{
lab :[
{
    "name": "blah",
    "branch": "root",
    "buildno": "2019"
}]
}

所以,我需要访问buildno(2019)的值,并将其分配给我的程序变量。

这是我的类

public class lab
{
    public string name { get; set; }
    public string branch { get; set; }
    public string buildno { get; set; }
}

我使用Newtonsoft.json尝试了这种方法。
        using (StreamReader r = new StreamReader(@"ba.json"))
        {
            string json2 = r.ReadToEnd();
            lab item = JsonConvert.DeserializeObject<lab>(json2);
            Console.WriteLine(item.buildno);
        }

但是我没有得到任何输出!!! 只有空白屏幕。

你能否尝试使用Newtonsoft库?如果有任何问题,请告诉我。 - Pranay Rana
@Pranay Rana,我刚刚更新了问题...仍然没有运气 :( - Abhishek K Suresh
@DodgerThud,你能否请解释一下我应该如何处理第二个类? - Abhishek K Suresh
@Pranay Rana 现在呢? - Abhishek K Suresh
这对你有用吗? - Pranay Rana
显示剩余3条评论
3个回答

2
你可以使用以下函数从JSON中获取单个值。

JObject.Parse()

只需将任何API返回的JSON作为参数传递给Parse函数,然后按以下方式获取该值:
// parsing the json returned by OneSignal Push API 
dynamic json = JObject.Parse(responseContent);
int noOfRecipients = json.recipients;

我使用OneSignal API发送推送通知,在调用他们的API时返回了一个JSON对象。其中'recipients'是JSON中返回的一个键。 希望这对某些人有所帮助。

我尝试了这个动态的json1 = JObject.Parse(@"C:\Users\ab\Desktop\Output\Sample\ba.json"); 但是我得到了这个错误 ---- 在解析值时遇到意外字符:C。路径 - Abhishek K Suresh
看看这里,可能会对你有帮助。 - Harry .Naeem

1
JSON结构,由您提供。
{
lab :[
{
    "name": "blah",
    "branch": "root",
    "buildno": "2019"
}
}

这不是有效的JSON结构,应该像这样:
{
lab :[
{
    "name": "blah",
    "branch": "root",
    "buildno": "2019"
}]
}

然后,针对此内容的C#类结构如下:
public class Lab
{
    public string name { get; set; }
    public string branch { get; set; }
    public string buildno { get; set; }
}

public class RootObject
{
    public List<Lab> lab { get; set; }
}

如果您这样做,下面的代码将起作用,或者您正在尝试的代码将起作用。

使用Deserialize/Serialize将您的JSON转换为.NET对象类型:使用Newtonsoft库:序列化和反序列化JSON

示例:

string json = @"{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";

Account account = JsonConvert.DeserializeObject<Account>(json);
Console.WriteLine( account.Email);

我尝试了完全相同的方法,但是我没有得到任何输出。Console.WriteLine(item.buildno); == 什么都没有!!! - Abhishek K Suresh
@AbhishekKSuresh - 你能分享一下你尝试过的代码和JSON吗? - Pranay Rana
@Pranay 我认为区别在于你的JSON是扁平对象,而OP的“lab”属性指向一个对象数组。 - ProgrammingLlama
1
@john - 我也是这么认为的,这就是为什么我请求他提供完整的JSON代码尝试,因为没有那个只是瞎猜。 - Pranay Rana
他提供了足够的信息,你可以清楚地看到这是一个数组。 - user2655904
@DodgerThud - 这不是有效的 JSON 结构..这就是为什么它无法工作的原因。 - Pranay Rana

0
首先,您可以通过以下方式创建一个JSON对象:
var lab = JSON.stringify({
    "name": "blah",
        "branch": "root",
        "buildno": "2019"
    });

然后你可以像这样获取这个 JSON 对象

dynamic model = JsonConvert.DeserializeObject(lab);

然后你会得到像这样的值

  lab l = new lab();
  l.buildno =  model.buildno;

希望这对你有所帮助。


我无法创建一个对象并直接提供数据。我必须从文件中读取数据。 - Abhishek K Suresh
请按照此教程操作 https://www.newtonsoft.com/json/help/html/DeserializeWithJsonSerializerFromFile.htm - zaman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接