XmlSerializerFormat не вложенный XML - PullRequest
2 голосов
/ 29 января 2010

Для своего проекта я использую XmlSerializerFormat для сериализации. У меня есть класс, например:

[SoapInclude(typeof(Thing))]
[SoapType("Thing", "TheNs", IncludeInSchema = true)]
public class Thing
{
 [SoapElement(IsNullable = true, DataType = "string")]
 public string ThingName = "aap";
}

[SoapType("Transportation", "TheNs", IncludeInSchema = true)]
[SoapInclude(typeof(Transportation))]
public class Transportation
{
 // The SoapElementAttribute specifies that the
 // generated XML element name will be "Wheels"
 // instead of "Vehicle".
 [SoapElement("Wheels")]
 public string Vehicle;
 [SoapElement(DataType = "dateTime")]
 public DateTime CreationDate;
 [SoapElement(IsNullable = true)]
 public Thing Thing;

} 

XML, сгенерированный из этого класса, имеет следующий формат:

<wrapper>
  <q1:Transportation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="id1" xmlns:q1="TheNs">
    <Truck xsi:type="xsd:string">MyCar</Truck>
    <CreationDate xsi:type="xsd:dateTime">2010-01-05T16:03:01.9436034+01:00</CreationDate>
    <Thing href="#id2" />
  </q1:Transportation>
  <q2:Thing id="id2" d2p1:type="q2:Thing" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" xmlns:q2="TheNs">
    <ThingName xmlns:q3="http://www.w3.org/2001/XMLSchema" d2p1:type="q3:string">thing</ThingName>
  </q2:Thing>
</wrapper>

Однако XML, который мне нужен, должен быть в следующем формате:

<wrapper>
  <Transportation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Vehicle>MyCar</Vehicle>
    <CreationDate>2010-01-05T16:03:01.7562378+01:00</CreationDate>
    <Thing>
      <ThingName>thing</ThingName>
    </Thing>
  </Transportation>
</wrapper>

Буду очень признателен, если у кого-нибудь есть решение этой проблемы.


xml и код не был виден.

Это пример класса:

[SoapInclude(typeof(Thing))]
[SoapType("Thing", "TheNs", IncludeInSchema = true)]
public class Thing
{
[SoapElement(IsNullable = true, DataType = "string")]
public string ThingName = "thing";
}

[SoapType("Transportation", "TheNs", IncludeInSchema = true)]
[SoapInclude(typeof(Transportation))]
public class Transportation
{
// The SoapElementAttribute specifies that the
// generated XML element name will be "Wheels"
// instead of "Vehicle".
[SoapElement("Wheels")]
public string Vehicle;
[SoapElement(DataType = "dateTime")]
public DateTime CreationDate;
[SoapElement(IsNullable = true)]
public Thing Thing;

 }

сгенерированный XML выглядит следующим образом

 <wrapper>
 <q1:Transportation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="id1" xmlns:q1="TheNs">
 <Truck xsi:type="xsd:string">MyCar</Truck>
 <CreationDate xsi:type="xsd:dateTime">2010-01-05T16:03:01.9436034+01:00</CreationDate>
 <Thing href="#id2" />
  </q1:Transportation>
  <q2:Thing id="id2" d2p1:type="q2:Thing" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" xmlns:q2="TheNs">
  <ThingName xmlns:q3="http://www.w3.org/2001/XMLSchema" d2p1:type="q3:string">thing</ThingName>
  </q2:Thing>
  </wrapper>

XML, который мне нужен, должен быть в следующем формате:

  <wrapper>
  <Transportation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <Vehicle>MyCar</Vehicle>
     <CreationDate>2010-01-05T16:03:01.7562378+01:00</CreationDate>
     <Thing>
         <ThingName>thing</ThingName>
     </Thing>
  </Transportation>
 </wrapper>
...