[Mono-dev] Bug in handling of Datetime in Xml Serialization - testcase in msg

Atsushi Eno atsushi at ximian.com
Mon Jan 7 08:11:55 EST 2008


Hello,

I'll take a look, but it had better be filed as a bug on bugzilla so
that the issue can be tracked down and is safer in case I just forget:
http://www.mono-project.com/Bugs

Atsushi Eno

Mads Bondo Dydensborg wrote:
> Hi there
> 
> I have a difference between output in current Mono SVN and Windows 2.xxx. The 
> following program construcs an object containing a date from an xml string, 
> serializes and deserializes a couple of times. On Windows, the output remains 
> stable, on Mono/Linux, my timezone appears to be substracted once for each 
> serialization/deserialization call.
> 
> Here is the program:
> 
> ---------------
> 
> using System;
> using System.IO;
> using System.Text;
> using System.Xml;
> using System.Xml.Serialization;
> 
> [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
> public class test {
>   public System.DateTime date;
> }
> 
> public class Test {
> 
>   public static string DeSe( string doc ) {
>     // Deserialize
>     XmlSerializer serializer = new XmlSerializer( typeof ( test ) );
>     StringReader sr = new StringReader( doc );
>     XmlReader reader = XmlReader.Create( sr );
>     test t     = (test) serializer.Deserialize( reader );
>     reader.Close();
>     sr.Close();
>     
>     // Serialize
>     MemoryStream memStream         = new MemoryStream();
>     XmlTextWriter writer           = new XmlTextWriter( memStream, 
> Encoding.UTF8 );
>     serializer.Serialize( writer, t );
>     writer.Close();
>     memStream.Close();
> 
>     string xml;
>     xml = Encoding.UTF8.GetString(memStream.GetBuffer());
>     xml = xml.Substring(xml.IndexOf(Convert.ToChar(60)));
>     xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1));
>     return xml;
>   }
> 
>   public static void Main() {
>     // Start with 10:30, no timezone
>     string doc = @"<test><date>2007-06-15T10:30:10.5</date></test>";
>     Console.WriteLine( "doc   = '{0}'", doc );
>       
>     string docm = DeSe( doc );
>     Console.WriteLine( "docm  = '{0}'", docm );
>       
>     string doc2m = DeSe( docm );
>     Console.WriteLine( "doc2m = '{0}'", doc2m );
> 
>     string doc3m = DeSe( doc2m );
>     Console.WriteLine( "doc3m = '{0}'", doc3m );
>   }
> }        
> 
> ----------
> 
> Here is the ouput from Windows:
> doc   = '<test><date>2007-06-15T10:30:10.5</date></test>'
> docm  = '<?xml version="1.0" encoding="utf-8"?><test 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><date>2007-06-15T10:30:10.5</date></test>'
> doc2m = '<?xml version="1.0" encoding="utf-8"?><test 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><date>2007-06-15T10:30:10.5</date></test>'
> doc3m = '<?xml version="1.0" encoding="utf-8"?><test 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><date>2007-06-15T10:30:10.5</date></test>'
> 
> And here is from current Mono SVN (1.2.6 same):
> 
> doc   = '<test><date>2007-06-15T10:30:10.5</date></test>'
> docm  = '<?xml version="1.0" encoding="utf-8"?><test 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><date>2007-06-15T10:30:10.5+02:00</date></test>'
> doc2m = '<?xml version="1.0" encoding="utf-8"?><test 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><date>2007-06-15T08:30:10.5+02:00</date></test>'
> doc3m = '<?xml version="1.0" encoding="utf-8"?><test 
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><date>2007-06-15T06:30:10.5+02:00</date></test>'
> 
> Note how the time "shifts" on Mono. I believe this is a bug.
> 
> Regards
> 
> Mads
> 




More information about the Mono-devel-list mailing list