Я пытаюсь уничтожить данные json из wikipedia api. Я хочу получить только информацию об изображении, а затем снова выполнить сериализацию для своих форматированных данных JSON. Но проблема в моем коде заключается в том, что в нем отображаются только последние данные из списка, а не все данные. Цикл foreach не работает.Looping не работает в JSON-сериализации с использованием Web Api Controller ASP.NET MVC
Мой код для Deserialize и сериализовать объект JSON является выглядеть this-
[SwaggerResponse(HttpStatusCode.OK, "A", typeof(PoiImageAnswer))]
[SwaggerResponse(HttpStatusCode.BadRequest, "Empty Answer", typeof(ModelStateDictionary))]
[SwaggerResponse(HttpStatusCode.InternalServerError, "No Response")]
[HttpPost]
[ActionName("Image")]
public IHttpActionResult Image([FromBody] PoiImageRequest request)
{
var result = new PoiImageAnswer {TransactionID = request.TransactionID};
using (WebClient client = new WebClient())
{
var response = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&redirects=1&generator=geosearch&prop=extracts|coordinates|pageimages&ggslimit=20&ggsradius=1000&ggscoord=52.5243700|13.4105300&&formatversion=2&exintro=1&explaintext=1&exlimit=20&coprop=type|dim|globe&colimit=20&piprop=thumbnail&pithumbsize=400&pilimit=20");
var json = JsonConvert.DeserializeObject<RootObject>(response);
List<PoiImageAnswer> poi = new List<PoiImageAnswer>();
foreach (var page in json.query.pages)
{
try
{
var Img= page.thumbnail.source;
result.Title = page.title;
result.Height = page.thumbnail.height;
result.Width = page.thumbnail.width;
result.ImageData = string.Format("{0:X}.jpg", page.thumbnail.source.GetHashCode());
result.TransactionID = request.TransactionID;
}
catch (Exception)
{
}
}
return Ok(result);
}
}
}
Мой C# класс для объекта JSON является, как показано ниже для понимания кода,
public class PoiImageAnswer
{
public string ImageID { set; get; }
public string Title { set; get; }
public int Width { set; get; }
public int Height { set; get; }
public string ImageData { set; get; }
public long TransactionID { set; get; }
}
public class Poi
{
public string Title { set; get; }
public string Description { set; get; }
public List<PoiImage> Images { set; get; }
public string OpeningHours { set; get; }
public double AirDistanceInKm { set; get; }
public double Lon { set; get; }
public double Lat { set; get; }
}
public class PoiImage
{
public string ImageID { set; get; }
}
я получаю выход как это последний объект из списка -
{
"ImageID": null,
"Title": "1976 Conference of Communist and Workers Parties of Europe",
"Width": 243,
"Height": 400,
"ImageData": "53E5DCF3.jpg",
"TransactionID": 0
Это потому, что переменная результата типа PoiImageAnswer - это единственный объект, а не коллекция. Если вам нужны все элементы из списка, вам нужна коллекция, в которой вы будете хранить форматированный json-объект, а затем эту коллекцию, которую вы должны отправить в качестве результата. –
@PankajKapare, Не могли бы вы объяснить мне, как я могу это сделать. В этом случае я очень новичок. Спасибо. –
Гарри, вам нужно освежить коллекции в .NET; пространство имен System.Collections.Generic, в частности, для обработки списков. Удачи! –