<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hello all,<br>
<br>
I've taken some time to dig again into this issue and tried to answer
some points mentioned in the thread (please correct me if I'm wrong!).
Attached are the patch for DateTime.cs (nothing really changed since
March) and the unit test.<br>
<br>
<br>
<br>
<b>- DateTime managed as a PrimitiveType by the BinaryFormatter?</b><br>
I've not seen any indication on the fact .NET2.0's BinaryFormatter
would not manage DateTime as a ISerializable but as a PrimitiveType.
When you look at the binary array generated by the BinaryFormatter, you
do have a two int64: the ticks and a int64 in which you have both the
ticks and the kind (as used in my patch).<br>
<br>
<br>
<br>
<b>- How .NET 2.0 stores DateTime internally?</b><br>
To quote MSDN's page on DateTime:<br>
<blockquote>
  <h4 class="subHeading" xmlns=""><small>Version Considerations</small></h4>
</blockquote>
<blockquote>
  <div class="subSection" xmlns=""><small> </small>
  <p><small>Prior to the .NET Framework version 2.0, the <b>DateTime</b>
structure contains a 64-bit field composed of an unused 2-bit field
concatenated with a private Ticks field, which is a 62-bit unsigned
field that contains the number of ticks that represent the date and
time. The value of the Ticks field can be obtained with the <a
 href="P_System_DateTime_Ticks.htm">Ticks</a> property.</small></p>
  <small> </small>
  <p><small>Starting with the .NET Framework 2.0, the <b>DateTime</b>
structure contains a 64-bit field composed of a private Kind field
concatenated with the Ticks field. The Kind field is a 2-bit field that
indicates whether the <b>DateTime</b> structure represents a local
time, a Coordinated Universal Time (UTC), or whether UTC or local time
is not specified. The Kind field is used to handle conversions between
local and UTC time, but not time comparisons or arithmetic. The value
of the Kind field can be obtained with the <a
 href="P_System_DateTime_Kind.htm">Kind</a> property.</small></p>
  </div>
</blockquote>
If you want more details, see the #region ISerializable&nbsp; at the bottom
of DateTime.cs - it's commented there.<br>
<br>
<br>
<br>
<b>- Version compatibility</b><br>
"Will this break with older Mono implementations, say with data that
was stored with old versions? It seems like you put some effort on not
breaking."<br>
No that won't break. My patch ensure backward compatibility, namely:<br>
<ul>
  <li>Mono CLR 1.1 is not concerned by my patch (it could be) and
remains not compatible with MS .NET 1.1 and 2.x<i><b></b><b></b></i><br>
  </li>
  <li>Mono CLR 2.x not patched <br>
  </li>
  <ul>
    <li>is not compatible with MS .NET 2.x (in both ways)<br>
    </li>
    <li>is not able to deserialize data serialized with Mono CLR 2.x
patched (since the latter serializes its data by using MS .NET 2.x
format)</li>
  </ul>
  <li>Mono for CLR 2.x patched</li>
  <ul>
    <li>serializes its data by using MS .NET 2.x format</li>
    <li>is able to read DateTime serialized with MS .NET 1.1 and 2.x
formats (MS .NET 2.x has the same backward compatibility)</li>
    <li>is able to read DateTime serialized with Mono for CLR 1.x not
patched and 2.x not patched </li>
  </ul>
</ul>
<br>
<br>
<b>- Unit test</b><br>
"Would you mind providing NUnit test cases that would exercise the
various binary formats? You could bundle the stuff as a binary blob in
an array and test the various code paths."<br>
Done. See DataTimeTest.cs<br>
<br>
<br>
<br>
<b>- Soap issue</b><br>
My hack works but it should be considered as temporary, as long as the
issue in the Soap Serializer itself has not been solved. I'm missing
both time and knowledge of the Soap serialization's internal mechanism
to handle this...<br>
<br>
<br>
Regards,<br>
Lionel<br>
<br>
</body>
</html>