DataSet.GetXml()

Hi all,

prenašam strežniško aplikacijo (pisana v .NET Fx 1.1, remoting) na .NET Fx 2.0. Podatkovni tipi so večinoma (tipizirani) DateSet-i, ki se na strani odjemalca prikazujejo s pomočjo XSLT transformacij. Naletel sem na manjši problem, zelo nerad pa bi spreminjal obstoječe XSLT transformacije.


Enostaven programček za test:
...
DataSet ds = new DataSet("Test");
ds.Locale = new CultureInfo("sl-SI");
 
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
       
ds.Tables.Add(dt);
       
for (int ii=0; ii<2; ii++) {
  DataRow dr = dt.NewRow();
  dr["ID"] = ii;
  dr["Name"] = string.Format("Name{0}", ii);
  dr["Date"] = new DateTime(2000,12,31,23,59,59);
  dt.Rows.Add(dr);
}
   
ds.AcceptChanges();
Console.WriteLine(ds.GetXml());
...


a) rezultat Fx 1.1:

<Test>
  <Table1>
    <ID>0</ID>
    <Name>Name0</Name>
    <Date>2000-12-31T23:59:59.0000000+01:00</Date>
  </Table1>
  <Table1>
    <ID>1</ID>
    <Name>Name1</Name>
    <Date>2000-12-31T23:59:59.0000000+01:00</Date>
  </Table1>
</Test>


b) rezultat Fx 2.0:

<Test>
  <Table1>
    <ID>0</ID>
    <Name>Name0</Name>
    <Date>2000-12-31T23:59:59+01:00</Date>
  </Table1>
  <Table1>
    <ID>1</ID>
    <Name>Name1</Name>
    <Date>2000-12-31T23:59:59+01:00</Date>
  </Table1>
</Test>


V primeru, da podamo datum, ki vsebuje tudi milisekunde, je izpis v obeh primerih enak:
...
dr["Date"] = DateTime.Now;
..
<Date>2006-03-08T11:06:44.7470188+01:00</Date>
...

DataSet 1.1 vedno serializira (preko GetXml() metode) tip DateTime v obliko CCYY-MM-DDThh:mm:ss.0000000Z, DataSet 2.0 pa brez zadnjih sedmih ničel, če mu ne podamo tudi milisekund. Ker v moji kodi za tip DateTime nikoli ni vrednosti z milisekundatmi oz. so enake 0, zadnjih sedmih ničel v XML elementu ni, tak format pa pričakuje XSLT transformacija... Poskušal sem z različnimi globalizacijami, Column.DateTimeMode, DateTimeKind, pa ne pomaga.

Ima kdo kak namig? Sicer sem tik pred tem, da se z Reflectorjem potopim v metodo GetXml() za 1.1 in 2.0...

 

Hvala & lp,
Damjan

 

Avtor: damjank, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.