[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