Bonjour,
J'ai une application Web d'un côté (asp.net 3.5) et des webservices de l'autre (aussi asp.net 3.5) qui interrogent une BDD en Sql Server 2005.
Afin de passer les informations entre les deux, je me base sur des DataSet que je sérialise et désérialise lors des transferts.
Mon problème est le suivant :
Lorsque je transfère et désérialise mes données, je perds mes informations en DBNull. Pire : sur des données en int, il me défini la colonne en auto-increment.
Voici mes codes de sérialization et dé-sérialisation :
Sérialisation :
Dé-sérialisation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public static XmlDocument GetXmlDocumentFromDataSet(DataSet dS) { StringBuilder build = new StringBuilder(); XmlWriter xWrite = XmlWriter.Create(build); dS.WriteXml(xWrite, XmlWriteMode.WriteSchema); XmlDocument xDocOut = new XmlDocument(); xDocOut.LoadXml(build.ToString()); return xDocOut; }
Pour information, voici un schéma XML renvoyé depuis le webservice qui pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public static DataSet GetDataSetFromXmlNode(XmlNode xNode) { DataSet ds = new DataSet(); ds.ReadXml(new XmlNodeReader(xNode)); return ds; }
J'ai du coup comme retour des valeurs fausses pour ma colonne "colAutoSelectTypeId" qui peut être à DbNull.
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 <xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root"> <xs:element name="root" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="Associer"> <xs:complexType> <...> <xs:element name="colAutoSelectTypeId" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>
Sachant que je ne peux pas créer un objet particulier pour chaque retour de ws vu que je dois faire aussi générique que possible (bibliothèque commune à l'équipe), que c'est moi qui la développe et elle n'est pas encore en production donc je peux changer le mode de fonctionnement de celle-ci.
Que puis-je faire pour prendre en compte DbNull (en sérialization ou désérialization, peu importe) ?
Merci !
Partager