Désérialisé classe dont un élément contient du Xml
Bonjour,
Mon problème est assez simple.
J'ai déclaré un schéma Xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| <?xml version="1.0" encoding="UTF-8"?>
<xs:schema id="SyncMLSpecification" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="SyncML">
<xs:complexType>
<xs:sequence>
<xs:element ref="SyncHdr" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="SyncBody" maxOccurs="1" minOccurs="1"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SyncHdr">
<xs:complexType>
<xs:sequence>
<xs:element ref="VerDTD" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="VerProto" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="SessionID" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="MsgID" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="Target" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="Source" maxOccurs="1" minOccurs="1"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SyncBody">
<xs:complexType>
<xs:choice>
<xs:element ref="Sync" minOccurs="1" maxOccurs="1"></xs:element>
<xs:element ref="Atomic" minOccurs="1" maxOccurs="1"></xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="VerDTD" type="xs:string"></xs:element>
<xs:element name="VerProto" type="xs:string"></xs:element>
<xs:element name="SessionID" type="xs:int"></xs:element>
<xs:element name="MsgID" type="xs:int"></xs:element>
<xs:element name="Target">
<xs:complexType>
<xs:sequence>
<xs:element ref="LocName" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="LocURI" maxOccurs="1" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Source">
<xs:complexType>
<xs:sequence>
<xs:element ref="LocName" maxOccurs="1" minOccurs="1"></xs:element>
<xs:element ref="LocURI" maxOccurs="1" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="LocName" type="xs:string"></xs:element>
<xs:element name="LocURI" type="xs:anyURI"></xs:element>
<xs:element name="Sync">
<xs:complexType>
<xs:sequence>
<xs:element ref="Add" minOccurs="1" maxOccurs="1"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Atomic">
<xs:complexType>
<xs:sequence>
<xs:element ref="CmdID" minOccurs="1" maxOccurs="1"></xs:element>
<xs:element ref="Replace" minOccurs="1" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CmdID" type="xs:int"></xs:element>
<xs:element name="Add" type="xs:string"></xs:element>
<xs:element name="Replace">
<xs:complexType>
<xs:sequence>
<xs:element ref="CmdID" minOccurs="1" maxOccurs="1"></xs:element>
<xs:element ref="Item" minOccurs="1" maxOccurs="1"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Item">
<xs:complexType>
<xs:sequence>
<xs:element ref="Data" minOccurs="1" maxOccurs="1"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Data" type="xs:string">
</xs:element>
</xs:schema> |
Via Visual Studio, j'ai généré les classes en utilisant la commande xsd.exe.
Mais lorsque je désérialize mon fichier Xml via la classe XmlSerializer, il n'arrive pas lire ce qui est dans l'élément data (qui est un autre fichier Xml).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?xml version="1.0" encoding="UTF-8" ?>
<SyncML>
<SyncHdr>
<VerDTD>1.1</VerDTD>
<VerProto>SyncML/1.1</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
<Target>
<LocURI>http://www.blabla.com</LocURI>
<LocName>AAAAA</LocName>
</Target>
<Source>
<LocURI>http://www.blabla.com</LocURI>
<LocName>XXXXXXX</LocName>
</Source>
</SyncHdr>
<SyncBody>
<Atomic>
<CmdID>1</CmdID>
<Replace>
<CmdID>0</CmdID>
<Item>
<Data>
<ExpenseReportJournalEntry>
<actorRef>monicag</actorRef>
</ExpenseReportJournalEntry>
</Data>
</Item>
</Replace>
</Atomic>
</SyncBody>
</SyncML> |
Et voici le code c#
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| StringReader stringReader = new StringReader(message);
SyncML contentMessageSyncML = null;
#region == Deserialize the message ==
try
{
XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(SyncML));
contentMessageSyncML = (SyncML)xmlSerializer.Deserialize(stringReader);
}
catch (InvalidOperationException ex)
{
if (ex.InnerException != null)
log.Warn("The message format is not valid", ex.InnerException);
else
log.Warn("The message format is not valid", ex);
return false;
} |
Que dois-je faire pour qu'il considère ce qu'il y a dans l'élément Data comme un string même si c'est de l' XML?