Я пытаюсь вернуть данные json из списка в списке. Данные извлекаются с помощью веб-клиента и десериализуются с помощью JSON.NET. Я хотел бы вернуть имя и изображение из списка «featuredCharts», который находится в списке «Результаты». Вот часть данных json, на которые я ссылаюсь.
"results":{
"featuredCharts":[
{
"id":46082,
"type":"chart",
"name":"Exclusives On Beatport - Week 5",
"slug":"exclusives-on-beatport-week-5",
"description":"",
"publishDate":"2012-01-30",
"price":{
"code":"usd",
"symbol":"$",
"value":2390
},
"audioFormatFee":{
"wav":{
"code":"usd",
"symbol":"$",
"value":1000
},
"aiff":{
"code":"usd",
"symbol":"$",
"value":1000
}
},
"genres":[
{
"id":11,
"name":"Tech House",
"slug":"tech-house",
"type":"genre"
},
{
"id":5,
"name":"House",
"slug":"house",
"type":"genre"
},
{
"id":17,
"name":"Electro House",
"slug":"electro-house",
"type":"genre"
},
{
"id":15,
"name":"Progressive House",
"slug":"progressive-house",
"type":"genre"
}
],
"images":{
"small":{
"width":30,
"height":30,
"url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951247.jpg",
"secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951247.jpg"
},
"medium":{
"width":60,
"height":60,
"url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951248.jpg",
"secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951248.jpg"
},
"large":{
"width":130,
"height":130,
"url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951249.jpg",
"secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/40\/4951249.jpg"
},
"xlarge":{
"width":500,
"height":500,
"url":"http:\/\/geo-media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/50\/4951250.jpg",
"secureUrl":"https:\/\/media.beatport.com\/items\/imageCatalog\/4000000\/900000\/50000\/1000\/200\/50\/4951250.jpg"
}
},
"chartOwner":null
},
Мои классы в настоящее время настроены так.
public class NewReleasesCharts //Root Object
{
public Metadata metadata { get; set; }
public List<ResultHome> results = new List<ResultHome>();
public IEnumerator<ResultHome> GetEnumerator()
{
return this.results.GetEnumerator();
}
}
public class ResultHome
{
public List<FeaturedCharts> featuredCharts { get; set; }
public List<FeaturedReleases> featuredReleases { get; set; }
}
public class FeaturedCharts
{
public int id { get; set; }
public string type { get; set; }
public string name { get; set; }
public string slug { get; set; }
public ChartImages chartImages { get; set; }
}
public class ChartImages
{
public ChartSmall chartSmall { get; set; }
public ChartMedium chartMedium { get; set; }
public ChartLarge chartLarge { get; set; }
}
public class ChartMedium
{
public int width { get; set; }
public int height { get; set; }
public string url { get; set; }
public string secureUrl { get; set; }
}
Это та часть, на которой я застрял. После десериализации данных я использую вложенные циклы foreach, но в настоящее время я получаю ошибку NullReferenceException на rc.featuredCharts
во внутреннем цикле foreach. Вот код.
// Deserialize home page data
void jsonHome_GetDataCompleted(object snder, DownloadStringCompletedEventArgs e)
{
NewReleasesCharts homeData = JsonConvert.DeserializeObject<NewReleasesCharts>(e.Result);
try
{
// Nested foreach loops to dispaly data
foreach (ResultHome rc in homeData)
{
foreach (FeaturedCharts fc in rc.featuredCharts)
{
// TODO: return name and image of chart
string name = fc.name;
listGenres.Items.Add(name);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
Я все еще новичок, когда дело доходит до С#, поэтому я не уверен, что делаю неправильно. Пример того, как это сделать правильно, даст мне что-то, на чем можно основываться, так как мне нужно будет сделать это в других частях моего приложения.
Спасибо.
ОБНОВЛЕНИЕ Вот полное исключение:
System.NullReferenceException was unhandled
Message=NullReferenceException StackTrace: at Beatport.MainPage.jsonHome_GetDataCompleted(объект sder, DownloadStringCompletedEventArgs e) в System.Net.WebClient.OnDownloadStringCompleted(DownloadStringCompletedEventArgs e) в System.Net.WebClient.DownloadStringOperationCompleted(Object arg) в System.Reflection.RuntimeMethodInfo.InternalInvoke (RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, связующее устройство, параметры объекта, язык и региональные параметры CultureInfo, логическое значение isBinderDefault, вызывающий объект сборки, логическое значение verifyAccess, StackCrawlMark и stackMark) в System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, связующее устройство, объект [] параметры, культура CultureInfo, StackCrawlMark и stackMark) в System.Reflection.MethodBase.Invoke(Object obj, параметры Object[]) в System.Delegate.DynamicInvokeOne(Object[] args) в System.MulticastDelegate.DynamicInvokeImpl(Object[] args ) в System.Delegate.D ynamicInvoke(аргументы Object[]) в System.Windows.Threading.DispatcherOperation.Invoke() в System.Windows.Threading.Dispatcher.Dispatch(приоритет DispatcherPriority) в System.Windows.Threading.Dispatcher.OnInvoke(контекст объекта) в System. Windows.Hosting.CallbackCookie.Invoke(аргументы Object[]) в System.Windows.Hosting.DelegateWrapper.InternalInvoke(аргументы Object[]) в System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams , ScriptParam& pResult)
try/catch/MessageBox.Show(ex.ToString());
Обратите внимание, что ex.Message выводит только текст сообщения, и вы захотите отобразить полное исключение. - person John Saunders   schedule 16.02.2012foreach (FeaturedCharts fc in rc.featuredCharts)
, что будет содержимымrc.featuredCharts
? - person Alan   schedule 16.02.2012