Bonjour,

Mon problème est assez simple.

J'ai déclaré un schéma 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
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 : 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>
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
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?