2016-11-19 1 views
1

У меня есть код ниже, и я хочу выбрать дочернюю ноту, когда я обращаюсь к «a». Но строка результата возвращается нуль, когда я выбрать символ «» узлуВыберите Token C# Json array

JObject jObj = (JObject)JsonConvert.DeserializeObject(strJson); 
Assert.IsTrue(response.IsSuccessStatusCode.Equals(true)); 
var a = (JArray)jObj["cast"]; 
string result = (string)a.SelectToken("character"); 

Это ответ 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? –

+1

как насчет указания индекса для вашего массива? 'string result = (string) a [0] .SelectToken (" character ");' –

+0

@MichaelFaisst благодарит, что это сработало. Я могу получить первый символ. Я полагаю, я могу пропустить их все, чтобы получить тот, который мне нужен – Mayamiko

ответ

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; 
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; } 
} 

Deserialize используя код ниже:

Это даст вам List или Array из SampleClass объекта. Вы можете использовать цикл foreach или LINQ, чтобы получить все поле character.

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

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

Ну, вы просто разбираете свою строку до JObject непосредственно с использованием метода JObject.Parse() или JArray.Parse(). Затем вы можете просто перебирать массив и получать объекты массива по индексу: jsonObj[0]. И если вы хотите получить определенную ценность этого объекта - используйте метод^jsonObj[0].Value<string>("character")