0

Я пытаюсь сериализовать данные json для информации о конкретном местоположении, например Name, ShortText, ImageUrl и Geocordinates. Я создал класс PoiInfo.cs внутри модели для json-объекта. Таким образом, сериализация Name, ShortText и Imageurl работает хорошо. Но у меня проблема с данными геоинформации. Мой PoiInfo.cs выглядит так:Json Сериализация с использованием Web Api Controller 2 в ASP.Net MVC

public class PoiInfo 
{ 
    public string Name { get; set; } 
    public string Shorttext { get; set; } 
    public GeoCoordinates GeoCoordinates { get; set; } 
    public List<string> Images { get; set; } 
} 

public class GeoCoordinates 
{ 
    public double Longitude { get; set; } 
    public double Latitude { get; set; } 
} 

Теперь в контроллере я пытаюсь сериализовать таким образом. Я даю shortly-

public JsonResult<PoiInfo> Get(string id) 
     { 
      WebClient client = new WebClient(); 
      var TextResponse = //Api I used from wikipedia 
      var ImageResponse = //Api I used from wikipedia 
      var GeoResponse = //Api I used from wikipedia 


      var TextResponseJson = JsonConvert.DeserializeObject<Rootobject>(TextResponse); 
      var TextfirstKey = TextResponseJson.query.pages.First().Key; 
      var TextResult = TextResponseJson.query.pages[TextfirstKey].extract; 

      var ImgresponseJson = //similar as before 

      var GeoResponseJson = JsonConvert.DeserializeObject<GeoRootobject>(GeoResponse); 
      var firstKey = GeoResponseJson.query.pages.First().Key; 
      var Latitude = GeoResponseJson.query.pages[firstKey].coordinates.First().lat; 
      var Longitude = GeoResponseJson.query.pages[firstKey].coordinates.First().lon; 

      var result = new PoiInfo(); 
      result.Shorttext = TextResult; 
      result.Name = id; 
      result.Images = new List<string> { ImageResult }; 
      result.GeoCoordinates = new List<string> {Double.Parse(Latitude+Longitude)}; // showing error double to string 


      return Json(result); 
    } 


    } 

Я хочу, чтобы мой результат в следующем ПУТЬ

{ 
"Name": "Burgtor", 
"Shorttext": "The Burgtor, built 1444 in late Gothic style, was the northern city gate of Hanseatic Lübeck.... 
"GeoCoordinates": { 
"Longitude": 10.6912, 
    "Latitude": 53.8738 
    }, 
"Images": [ 
"8AB1DF99.jpg or //Image url" 
    ] 
} 

Пока все нормально, кроме GeoCordinates. Как я могу исправить свой код.

ответ

1
//... 
result.GeoCoordinates = new GeoCoordinates{ 
           Latitude = Double.Parse(Latitude), 
           Longitude = Double.Parse(Longitude) 
          }; 
///... 
+0

@ JamieD77 Поскольку C# 3.0 Конструктор скобки необязательны при использовании инициализатора. – serhiyb

+0

Если комментарий, который у вас есть рядом с строкой геокодирования, это ошибка, которую вы получаете, тогда ошибка сообщает вам, в чем проблема. Вы пытаетесь поместить двойной список в список строк. Вам нужно включить двойную строку, чтобы она работала. – Marko

+0

@serhiyb: Спасибо, что работает. Мне нужно добавить ToString() после Latidute и долготы. –

0

Это мой модифицированный ответ

  result.GeoCoordinates = new GeoCoordinates 
      { 
       Latitude = Latitude; 
       Longitude = Longitude 
      }; 
+0

Если Широта и долгота не являются строками, то какой тип они? – serhiyb

+0

Вы попробовали просто снять «Double.Parse» вместо этого? – JamieD77

+0

Когда я попытался с вашим кодом, он показывает ошибку: - Наилучшее перегруженное соответствие метода для 'double.Parse (string)' имеет некоторые недопустимые аргументы \t и еще одна ошибка. Аргумент 1: невозможно преобразовать из 'double' в 'string'. Я использовал этот api для получения геоинформации https://en.wikipedia.org/w/api.php?action=query&format=json&prop=coordinates&titles=Berlin –