2016-06-02 1 views
0

Мне нужно сделать запрос XML. Мне интересно, как создать XML-запрос с узлом с атрибутами. Вот пример рабочего запроса, который я опробовал в Postman.Как построить строго типизированный запрос XML POST с атрибутами

 <ItemDestination DestinationType="geocode" Longitude="0.1278" Latitude="51.5074" RadiusKm="100"/> 

В запросе XML я должен сделать, то ItemDestination узел имеет несколько атрибутов, таких как «Lattitude» и «долгота». Вот класс, что инструмент XML2C# перевернул XML в:

[XmlRoot(ElementName = "ItemDestination")] 
    public class ItemDestination 
    { 
     [XmlAttribute(AttributeName = "DestinationType")] 
     public string DestinationType { get; set; } 
     [XmlAttribute(AttributeName = "Longitude")] 
     public string Longitude { get; set; } 
     [XmlAttribute(AttributeName = "Latitude")] 
     public string Latitude { get; set; } 
     [XmlAttribute(AttributeName = "RadiusKm")] 
     public string RadiusKm { get; set; } 
    } 

теперь, когда я делаю вызов вместо узла, имеющий атрибуты, как я хочу, когда я открываю скрипач и проверить запрос, он выглядит это:

<ItemDestination> 
     <DestinationType>geocode</DestinationType> 
     <Longitude>2.64663399999995</Longitude> 
     <Latitude>39.57119</Latitude> 
     <RadiusKm>5</RadiusKm> 
    </ItemDestination> 

Это не то, что я хочу. Итак, как мне изменить класс, чтобы включить вышеуказанный запрос в следующий запрос?

<ItemDestination DestinationType="geocode" Longitude="0.1278" Latitude="51.5074" RadiusKm="100"/> 

Сериализация Код:

XmlSerializer serializer = new XmlSerializer(typeof(GTASearchRequest).ToString()); 
    var xmlRequest = serializer.Serialize(request); 
+0

Класс правилен, если вы используете XmlSerializer для генерации XML. Я подозреваю, что вы используете что-то другое - возможно, DataContractSerializer? – MiMo

+0

привет MiMo, я разместил код сериализации ... Я использую XMLSerializer –

+0

Это не похоже на класс Microsoft XmlSerializer: https://msdn.microsoft.com/en-us/library/system.xml.serialization. xmlserializer (v = vs.110) .aspx (конструктор ожидает тип, а не строку, а Serialize имеет два параметра) – MiMo

ответ

0

Этот код:

 var data = new ItemDestination 
     { 
      DestinationType = "geocode", 
      Longitude = "2.64663399999995", 
      Latitude = "39.57119", 
      RadiusKm = "5" 
     }; 

     var serializer = new XmlSerializer(typeof(ItemDestination)); 
     var writer = new StringWriter(); 
     serializer.Serialize(writer, data); 
     writer.Flush(); 
     var xmlRequest = writer.GetStringBuilder().ToString(); 

где ItemDestination объявлен как:

[XmlRoot(ElementName = "ItemDestination")] 
public class ItemDestination 
{ 
    [XmlAttribute(AttributeName = "DestinationType")] 
    public string DestinationType { get; set; } 
    [XmlAttribute(AttributeName = "Longitude")] 
    public string Longitude { get; set; } 
    [XmlAttribute(AttributeName = "Latitude")] 
    public string Latitude { get; set; } 
    [XmlAttribute(AttributeName = "RadiusKm")] 
    public string RadiusKm { get; set; } 
} 

производят нужную строку в xmlRequest

+0

так DestinationType, Longitude, Latitude и RadiusKm являются внутренними классами? –

+0

они являются строкой - определение класса «ItemDestination» точно такое же, как в вопросе – MiMo

Смежные вопросы