如何获取JSON字符串中的元素

时间:2019-03-01 12:56:17

标签: c# json

我有这个称为受让人的JSON字符串:

{
    "id": 15247055788906,
    "gid": "15247055788906",
    "name": "Bo Sundahl",
    "resource_type": "user"
}

如果不为null,我想获取“名称”元素及其值。我尝试过

var jobject = JsonConvert.DeserializeObject<JObject>(assignee);

还有

var jo = JObject.Parse(assignee);

我尝试遍历它,但是即使我仅打印受让人变量本身填充的数据,也只会得到空异常或空输出。

我的循环就像:

foreach (var result in jobject["name"])
{
    Debug.WriteLine(result);
}

5 个答案:

答案 0 :(得分:3)

最简单,最好的方法是反序列化为C#类,例如:

public class Data
{
    public long Id { get; set; }
    public string Name { get; set; }
    //etc..
}

像这样反序列化

var data = JsonConvert.DeserializeObject<Data>(json);
var name = data.Name;

答案 1 :(得分:1)

要获取名称,请使用

string name = jobject["name"];

答案 2 :(得分:0)

使用["name"]返回一个JToken,如果该属性不存在,则为null

JToken token = jo["name"];
Debug.WriteLine(token?.ToString() ?? "<default value>");

答案 3 :(得分:0)

如果您事先不知道属性,则可以遍历JObject属性并按以下方式获取名称值对:

var jsonObject = JObject.Parse(str);
foreach (var item in jsonObject)
{
   var name = item.Key;
   JToken token = item.Value;
   if (token is JValue)
   {
      var value = token.Value<string>();
   }
}

答案 4 :(得分:0)

这是它应该如何工作的:

class Data
  {
    public long? Id { get; set; }
    public string Gid { get; set; }
    public string Name { get; set; }
    public string Resource_Type { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {

      string assignee = "{\"id\": 15247055788906, \"gid\": \"15247055788906\", \"name\": \"Bo Sundahl\", \"resource_type\": \"user\"}";
      Data data = JsonConvert.DeserializeObject<Data>(assignee);
      Console.WriteLine(data.Id);
      Console.WriteLine(data.Gid);
      Console.WriteLine(data.Name);
      Console.WriteLine(data.Resource_Type);
      Console.ReadLine();
    }
  }