【问题标题】:Accessing a single value from a json file in c#从 C# 中的 json 文件访问单个值
【发布时间】:2018-05-23 05:26:32
【问题描述】:

我的 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 ,如果有什么问题请告诉我
  • 您的 JSON 文件和您的课程不匹配。在您的 JSON 文件中,您有一个属性 lab,它是一个 !->arraylab,它是子类的 List
  • @Pranay Rana 我刚刚更新了问题.. 仍然没有运气:(
  • @DodgerThud 你能解释一下我在二等课上应该做什么吗?
  • @AbhishekKSuresh - 更新了我的答案看看,你给出的 json 结构不正确

标签: c# json c#-4.0


【解决方案1】:

您可以使用以下函数从 json 中获取单个值。

JObject.Parse()

只需将任何 API(如果您正在使用)返回的 json 作为参数传递给 Parse 函数,并获取如下值:

// parsing the json returned by OneSignal Push API 
dynamic json = JObject.Parse(responseContent);
int noOfRecipients = json.recipients;

我使用 OneSingal API 发送推送通知,并在点击他们的 API 时返回一个 json 对象。这里的“收件人”基本上是 json 中返回的密钥。 希望这对某人有所帮助。

【讨论】:

  • 我试过这个动态 json1 = JObject.Parse(@"C:\Users\ab\Desktop\Output\Sample\ba.json");我收到此错误----解析值时遇到意外字符:C.Path
  • stackoverflow.com/questions/22648030/… 看看这里,可能对你有帮助。
【解决方案2】:

jsong结构,你给的

{
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 库:Serializing and Deserializing 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); == 没有!!!
  • @AbhishekKSuresh - 你能分享你尝试过的代码和json吗
  • @Pranay 我认为不同之处在于您的 JSON 平面对象,而 OP 的“实验室”属性指向对象数组。
  • @john - 我虽然是这样,但这就是为什么我要求他提供完整的 json 代码,因为没有它只是猜测工作
  • 他提供了足够的信息,你可以从他的 OP 中清楚地看到它的数组。
【解决方案3】:

首先你创建一个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;

希望对您有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多