2016-08-09 1 views
0

Я получаю нулевые результаты в списке результатов, когда это сериализовано. Я на самом деле пытается получить геометрию результата, но по какой-то причине все результаты не отображаются, и когда я делаю подсчет я получаю 0.xml to C# классы не упорядочиваются правильно

вот фрагмент из XML

<?xml version="1.0" encoding="UTF-8"?> 
<PlaceSearchResponse> 
<status>OK</status> 
<result> 
    <name>Premier Inn Manchester Deansgate Locks</name> 
    <vicinity>Medlock Street, Manchester</vicinity> 
    <type>lodging</type> 
    <type>restaurant</type> 
    <type>food</type> 
    <type>point_of_interest</type> 
    <type>establishment</type> 
    <geometry> 
    <location> 
    <lat>53.4713048</lat> 
    <lng>-2.2474693</lng> 
    </location> 
    <viewport> 
    <southwest> 
    <lat>53.4711143</lat> 
    <lng>-2.2475661</lng> 
    </southwest> 
    <northeast> 
    <lat>53.4718764</lat> 
    <lng>-2.2473777</lng> 
    </northeast> 
    </viewport> 
    </geometry> 

C#

if (webResponse.error == null) 
    { 
     print(webResponse.text); 
     PlacesApiQueryResponse placesObject = LoadFromText(webResponse.text); 
     print(placesObject.results.Count); 

     foreach(var entity in placesObject.results) 
     { 
      print(entity.geometry.location.lat + " | " + entity.geometry.location.lng); 
     } 

    } 
    else 
    { 
     print(webResponse.error); 
    } 
} 

public static PlacesApiQueryResponse LoadFromText(string text) 
{ 
    var serializer = new XmlSerializer(typeof(PlacesApiQueryResponse), new XmlRootAttribute("PlaceSearchResponse")); 
    return serializer.Deserialize(new StringReader(text)) as PlacesApiQueryResponse; 
} 
} 

public class Location 
{ 
    public double lat { get; set; } 
    public double lng { get; set; } 
} 

public class Geometry 
{ 
    public Location location { get; set; } 
} 

public class OpeningHours 
{ 
    public bool open_now { get; set; } 
} 

public class Photo 
{ 
    public int height { get; set; } 
    public List<object> html_attributions { get; set; } 
    public string photo_reference { get; set; } 
    public int width { get; set; } 
} 

public class AltId 
{ 
    public string place_id { get; set; } 
    public string scope { get; set; } 
} 

public class Result 
{ 
    public Geometry geometry { get; set; } 
    public string icon { get; set; } 
    public string id { get; set; } 
    public string name { get; set; } 
    public OpeningHours opening_hours { get; set; } 
    public List<Photo> photos { get; set; } 
    public string place_id { get; set; } 
    public string scope { get; set; } 
    public List<AltId> alt_ids { get; set; } 
    public string reference { get; set; } 
    public List<string> types { get; set; } 
    public string vicinity { get; set; } 
    public string rating { get; set; } 
} 

public class PlacesApiQueryResponse 
{ 
    public List<object> html_attributions { get; set; } 
    public List<Result> results { get; set; } 
    public string status { get; set; } 
} 
+0

Что произошло до 'if (webResponse.error == null)' в исходном коде C#? Кроме того, что вы сериализуете и где вы его сериализуете? –

+0

Переименуйте класс «PlacesApiQueryResponse» как «PlaceSearchResponse» или добавьте украшение XMLElement в класс. –

+0

@Telans Это не проблема. –

ответ

1

Ваши классы просто не соответствуют входному XML в отношении того, как работает XmlSerializer. Проблемы есть с List<T> сериализации, где требуется два уровня XML, как это:

<list-element> 
    <item-element> 
     … content goes here … 
    </item-element> 
    … 
</list-element> 

Вы должны изменить как XML и соответствующие классы, например:

<results> ← new element groupping all <result> elements 
    <result>…</result> 
</result> 

и класс :

public class PlacesApiQueryResponse 
{ 
    public List<object> html_attributions { get; set; } 

    // attribute to tell XmlSerializer how are the item-elements named 
    [XmlArrayItem("result")] 
    public List<Result> results { get; set; } 
    public string status { get; set; } 
} 
+0

Я не могу изменить ответ google xml, я могу установить атрибут. – user1552172

+0

Я согласен, что это сработает, за исключением того, что я не могу изменить xml :( – user1552172