2013-08-28 3 views
1

мне нужно сериализовать мой C класс # для XML выглядеть примерно так:Форматтеры для глубокого вложенного сериализации XML узла

<request> 
    <session>12345</session> 
    <page>1</page> 
    <elements_per_page>999</elements_per_page> 
    <location> 
     <zone>aaaa</zone> 
     <region>bbbb</region> 
     <coordinates> 
      <lat>38.680632</lat> 
      <lon>-96.5001</lon> 
     </coordinates> 
    </location> 
</request> 

То, что я не хочу есть 3 класса (запрос, местоположение, координаты), я просто хотите 1 класс со всеми изменяемыми атрибутами как root этого класса, а затем добавили некоторые теги сериализации, которые создавали бы этот вложенный XML, это вообще возможно?

Давайте начнем с голым классом:

[XmlRoot] 
class request 
{ 
    [XmlElement] 
    public int session { get; set; } 
    [XmlElement] 
    public int page { get; set; } 
    [XmlElement] 
    public int elements_per_page { get; set; } 
    [?] 
    public string zone { get; set; } 
    [?] 
    public string region { get; set; } 
    [?] 
    public decimal lat { get; set; } 
    [?] 
    public decimal lon { get; set; } 
} 

Как сопоставить их так в XML, как я описал создан? Спасибо за помощь. Хорошие люди :)

ответ

0

«Это возможно?»

Нет. В чем проблема с 3 классами? Как вы хотите связать XML-статический код вообще каким-то другим способом?

Кроме того, если вы просто хотите вытереть некоторый XML, вы можете использовать, например, System.Xml.XmlDocument и построить xml с нуля, который вы могли бы сериализовать с помощью System.Xml.Serialization.XmlSerializer. Как это:

public string SerializeRequest(Request request) 
{ 
     XmlDocument document = new XmlDocument(); 

     XmlElement requestElement = document.CreateElement("request"); 

     XmlElement sessionElement = document.CreateElement("session"); 
     sessionElement.InnerText = request.session.ToString(CultureInfo.InvariantCulture); 

     XmlElement pageElement = document.CreateElement("page"); 
     pageElement.InnerText = request.page.ToString(CultureInfo.InvariantCulture); 

     XmlElement elementsPerPageElement = document.CreateElement("elements_per_page"); 
     elementsPerPageElement.InnerText = request.elements_per_page.ToString(CultureInfo.InvariantCulture); 

     XmlElement zoneElement = document.CreateElement("zone"); 
     zoneElement.InnerText = request.zone; 
     XmlElement regionElement = document.CreateElement("region"); 
     regionElement.InnerText = request.region; 

     XmlElement latElement = document.CreateElement("lat"); 
     latElement.InnerText = request.lat.ToString(CultureInfo.InvariantCulture); 
     XmlElement lonElement = document.CreateElement("lon"); 
     lonElement.InnerText = request.lon.ToString(CultureInfo.InvariantCulture); 
     XmlElement coordinatesElement = document.CreateElement("coordinate"); 
     coordinatesElement.AppendChild(latElement); 
     coordinatesElement.AppendChild(lonElement); 

     XmlElement locationElement = document.CreateElement("location"); 
     locationElement.AppendChild(zoneElement); 
     locationElement.AppendChild(regionElement); 
     locationElement.AppendChild(coordinatesElement); 

     requestElement.AppendChild(sessionElement); 
     requestElement.AppendChild(pageElement); 
     requestElement.AppendChild(elementsPerPageElement); 
     requestElement.AppendChild(locationElement); 

     document.AppendChild(requestElement); 

     string serializedObj = document.OuterXml; 
     return serializedObj; 
} 
+0

1. Я не хочу «грязной выплюнуть» любой XML, мне нужно, чтобы создать XML в соответствии со спецификацией предоставленной мне (я не получил XSD для создания классов). 2. Какой смысл иметь 3 класса? Я надеялся, что есть некоторые форматы, чтобы указать, что это вложен так ... –

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