Если элемент содержит определенный элемент с флагом, получите его и добавьте в коллекцию. В моем коде это означает, что получить все песни, где genreid == 18 // например, номер может быть любым int32 //. Я буду рад видеть ответы. Я использовал linq для его получения, но вижу только то, что число int32 и ничего больше. это мой код: (список песни List)Получить все конкретные элементы с флагом
var json = e.Result;
var jobject = JObject.Parse(json);
var serializer = new JsonSerializer();
serializer.Converters.Add(new ResponseDataConverter());
var songList = jobject["response"].ToObject<SongList>(serializer);
song.GenreId = (int)from other in songList.Songs where other.GenreId == 18 select other.GenreId;
если это поможет вам это мой класс десериализации: (с перекрытыми методами)
public abstract class ResponseData
{
[JsonProperty(PropertyName = "id")]
public int Id { get; set; }
}
public class SongData : ResponseData
{
[JsonProperty(PropertyName = "artist")]
public string Artist { get; set; }
[JsonProperty(PropertyName = "title")]
public string SongName { get; set; }
[JsonProperty(PropertyName = "url")]
public string SongUri { get; set; }
[JsonProperty(PropertyName = "duration")]
public int Duration { get; set; }
[JsonProperty(PropertyName = "owner_id")]
public int OwnerId { get; set; }
[JsonProperty(PropertyName = "lyrics_id")]
public int LyricsId { get; set; }
[JsonProperty(PropertyName = "genre_id")]
public int GenreId { get; set; }
}
public class UserData : ResponseData
{
[JsonProperty(PropertyName = "photo")]
public string Photo { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "name_gen")]
public string NameGen { get; set; }
}
public class SongList
{
[JsonProperty(PropertyName = "count")]
public int Count { get; set; }
[JsonIgnore]
public List<SongData> Songs { get; set; }
[JsonIgnore]
public List<UserData> Users { get; set; }
[JsonProperty(PropertyName = "items")]
public ResponseData[] Items
{
get
{
return (Users ?? Enumerable.Empty<UserData>()).Cast<ResponseData>().Concat((Songs ?? Enumerable.Empty<SongData>()).Cast<ResponseData>()).ToArray();
}
set
{
Songs = (value ?? Enumerable.Empty<ResponseData>()).OfType<SongData>().ToList();
Users = (value ?? Enumerable.Empty<ResponseData>()).OfType<UserData>().ToList();
}
}
}
public class ResponseDataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(ResponseData).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader,
Type objectType, object existingValue, JsonSerializer serializer)
{
JObject item = JObject.Load(reader);
if (item["name"] != null)
{
return item.ToObject<UserData>();
}
else
{
return item.ToObject<SongData>();
}
}
public override void WriteJson(JsonWriter writer,
object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
я нужна помощь. Я потратил половину своего рабочего дня на эту проблему. Работа с IEnumerable <> Коллекция трудна. Так трудно. Может быть, я что-то пропустил, но я молод и просто учился.
Это не совсем понятно, что вы просите - не могли бы вы перефразировать проблему, текущую ситуацию и ваши ожидаемые результаты более подробным и понятным образом? –
Мне нужна коллекция, где будут только элементы с genreid == 18. Когда я получил все результаты от json, мне нужно отсортировать их в разных коллекциях по их genreid –