Bonjour,
Mon problème est assez simple.
J'ai déclaré un schéma Xml :
Via Visual Studio, j'ai généré les classes en utilisant la commande xsd.exe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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).
Et voici le code c#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Partager