Предполагая, что ваш json текст похож на (он может содержать гораздо больше данных, это не имеет значения):
{
"data": {
"program": {
"video": [
{
"m3u8Url": "http://go.to/video1",
"vid": "",
"rp": 0
},
{
"m3u8Url": "http://go.to/video2",
"m3u8": "#EXTM3U #EXT-X-TARGET...",
"vid": "",
"rp": 0
},
{
"m3u8Url": "http://go.to/video3",
"vid": "",
"rp": 0
}
]
}
}
}
Вы можете получить первое видео, содержащее # EXTM3U используя следующий код:
var anonymousObj = new
{
data = new
{
program = new
{
video = new[]
{
new
{
m3u8Url = "",
m3u8 = "",
vid = "",
rp = 0
}
}
}
}
};
var obj = JsonConvert.DeserializeAnonymousType(json, anonymousObj);
var video = obj?.data?.program?.video?.FirstOrDefault(v => v.m3u8?.Contains("#EXTM3U") == true);
Другое решение , если вы используете Visual Studio, вы можете сопоставить любой текст JSON с классом с помощью редактора. Go для редактирования -> Специальная вставка -> Вставить JSON как классы. Вывод, например, JSON будет:
public class Rootobject
{
public Data data { get; set; }
}
public class Data
{
public Program program { get; set; }
}
public class Program
{
public Video[] video { get; set; }
}
public class Video
{
public string m3u8Url { get; set; }
public string vid { get; set; }
public int rp { get; set; }
public string m3u8 { get; set; }
//it will have other props
}
Затем вы можете использовать JsonConvert и десериализовать его до типа Rootobject.
var obj2 = JsonConvert.DeserializeObject<Rootobject>(json);
var video2 = obj2?.data?.program?.video?.FirstOrDefault(v => v.m3u8?.Contains("#EXTM3U") == true);