选择令牌 C# Json 数组

3
我有以下代码,当我访问'a'时,我想选择子节点。但是,当我选择“character”节点时,字符串结果返回null。
JObject jObj = (JObject)JsonConvert.DeserializeObject(strJson);
Assert.IsTrue(response.IsSuccessStatusCode.Equals(true));
var a = (JArray)jObj["cast"];
string result = (string)a.SelectToken("character");

这是我从'a'获取的JSON响应:
{[
{
"character": "Eddard Stark",
"credit_id": "5256c8ad19c2956ff60478a6",
"id": 48,
"name": "Sean Bean",
"profile_path": "/iIxP2IzvcLgr5WaTBD4UfSqaV3q.jpg",
"order": 0
},
{
"character": "Jon Snow",
"credit_id": "5256c8af19c2956ff6047af6",
"id": 239019,
"name": "Kit Harington",
"profile_path": "/dwRmvQUkddCx6Xi7vDrdnQL4SJ0.jpg",
"order": 0
},
{
"character": "Robert Baratheon",
"credit_id": "5256c8ad19c2956ff60478e2",
"id": 13633,
"name": "Mark Addy",
"profile_path": "/tGWYaLPIGvPJiKx9KzTBMITo7uK.jpg",
"order": 1
},
{
"character": "Daenerys Targaryen",
"credit_id": "5256c8af19c2956ff60479f6",
"id": 1223786,
"name": "Emilia Clarke",
"profile_path": "/tB1nE2LJH81f5UMiGhKCSlaqsF1.jpg",
"order": 1
},
{
"character": "Tyrion Lannister",
"credit_id": "5256c8b219c2956ff6047cd8",
"id": 22970,
"name": "Peter Dinklage",
"profile_path": "/xuB7b4GbARu4HN6gq5zMqjGbkwF.jpg",
"order": 2
}
]}

1
你的 JSON 中哪里有类型转换(cast)? - Vivek Nuna
1
你可以为数组指定一个索引吗?string result = (string)a[0].SelectToken("character"); - Michael Faisst
@MichaelFaisst 谢谢,这个方法很好用。我可以获取第一个字符元素。我想我可以通过循环遍历它们来获取我需要的那个。 - Mayamiko
@Mayamiko 是的,那是正确的 :) - Michael Faisst
3个回答

1

你的JSON似乎有误,你需要移除开始和结尾的花括号。

正确的JSON:

[{
    "character": "Eddard Stark",
    "credit_id": "5256c8ad19c2956ff60478a6",
    "id": 48,
    "name": "Sean Bean",
    "profile_path": "/iIxP2IzvcLgr5WaTBD4UfSqaV3q.jpg",
    "order": 0
}, {
    "character": "Jon Snow",
    "credit_id": "5256c8af19c2956ff6047af6",
    "id": 239019,
    "name": "Kit Harington",
    "profile_path": "/dwRmvQUkddCx6Xi7vDrdnQL4SJ0.jpg",
    "order": 0
}, {
    "character": "Robert Baratheon",
    "credit_id": "5256c8ad19c2956ff60478e2",
    "id": 13633,
    "name": "Mark Addy",
    "profile_path": "/tGWYaLPIGvPJiKx9KzTBMITo7uK.jpg",
    "order": 1
}, {
    "character": "Daenerys Targaryen",
    "credit_id": "5256c8af19c2956ff60479f6",
    "id": 1223786,
    "name": "Emilia Clarke",
    "profile_path": "/tB1nE2LJH81f5UMiGhKCSlaqsF1.jpg",
    "order": 1
}, {
    "character": "Tyrion Lannister",
    "credit_id": "5256c8b219c2956ff6047cd8",
    "id": 22970,
    "name": "Peter Dinklage",
    "profile_path": "/xuB7b4GbARu4HN6gq5zMqjGbkwF.jpg",
    "order": 2
}]

等效的模型类:

public class SampleClass
{
    public string character { get; set; }
    public string credit_id { get; set; }
    public int id { get; set; }
    public string name { get; set; }
    public string profile_path { get; set; }
    public int order { get; set; }
}

使用以下代码进行反序列化:

它将为您提供 SampleClass 对象的 ListArray。您可以使用 foreach 循环或 LINQ 获取所有 character 字段。

List<SampleClass> lsObj = JsonConvert.DeserializeObject<List<SampleClass>>(strJson);

    foreach(SampleClass obj in lsObj)
    {
        string character = obj.character;
    }

0

你可以直接使用 JObject.Parse() 方法或者 JArray.Parse() 方法把字符串解析成 JObject。然后你就可以通过索引迭代你的数组并获取数组对象:jsonObj[0]。如果你想获取某个特定对象的值,则可以使用 Value<T>() 方法:jsonObj[0].Value<string>("character")


0

首先,您需要创建模型类。您可以使用http://json2csharp.com/,并使用Json.NET进行反序列化。

使用以下命名空间:

using Newtonsoft.Json;

模型类和DeserializeObject方法

        public class RootObject
    {
        public string character { get; set; }
        public string credit_id { get; set; }
        public int id { get; set; }
        public string name { get; set; }
        public string profile_path { get; set; }
        public int order { get; set; }
    }


var x =JsonConvert.DeserializeObject<List<RootObject>>(myjsondata);
var character = x[index].character;

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