--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Runtime.Serialization;
+using System.Xml;
+
+using System.Text;
+
+using NUnit.Framework;
+
+namespace MonoTests.System.Runtime.Serialization
+{
+ [TestFixture]
+ public class Bug3258Test
+ {
+ [Test]
+ public void TestSerializeNullDateTimeOffsetNullable ()
+ {
+ // Create the writer object.
+ StringBuilder stringBuilder = new StringBuilder ();
+
+ DateTimeOffset? dto = null;
+
+ DataContractSerializer ser = new DataContractSerializer (typeof (DateTimeOffset?));
+
+ using (var xw = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (new StringWriter (stringBuilder))))
+ {
+ ser.WriteObject (xw, dto);
+ }
+
+ string actualXml = stringBuilder.ToString ();
+ string expectedXml = "<?xml version=\"1.0\" encoding=\"utf-16\"?><DateTimeOffset i:nil=\"true\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\" />";
+
+ Assert.AreEqual (expectedXml, actualXml, "#1 Null DateTimeOffset? serialization error");
+
+ using (var xr = XmlDictionaryReader.CreateDictionaryReader (XmlReader.Create (new StringReader (actualXml))))
+ {
+ DateTimeOffset? actualDto = (DateTimeOffset?)ser.ReadObject (xr, true);
+
+ Assert.AreEqual (dto, actualDto, "#2 Null DateTimeOffset? deserialization error");
+ Assert.IsNull (actualDto, "#3 Null DateTimeOffset? deserialization error");
+ }
+ }
+
+ [Test]
+ public void TestSerializeDateTimeOffsetNullable ()
+ {
+ // Create the writer object.
+ StringBuilder stringBuilder = new StringBuilder ();
+
+ DateTimeOffset? dto = new DateTimeOffset (2012, 05, 04, 02, 34, 00, new TimeSpan (-2, 0, 0));;
+
+ DataContractSerializer ser = new DataContractSerializer (typeof (DateTimeOffset?));
+
+ using (var xw = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (new StringWriter (stringBuilder))))
+ {
+ ser.WriteObject (xw, dto);
+ }
+
+ string actualXml = stringBuilder.ToString ();
+ string expectedXml = "<?xml version=\"1.0\" encoding=\"utf-16\"?><DateTimeOffset xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\"><DateTime>2012-05-04T04:34:00Z</DateTime><OffsetMinutes>-120</OffsetMinutes></DateTimeOffset>";
+
+ Assert.AreEqual (expectedXml, actualXml, "#1 Nullable DateTimeOffset serialization error");
+
+ using (var xr = XmlDictionaryReader.CreateDictionaryReader(XmlReader.Create (new StringReader (actualXml))))
+ {
+ DateTimeOffset? actualDto = (DateTimeOffset?)ser.ReadObject (xr, true);
+
+ Assert.AreEqual (dto, actualDto, "#2 Nullable DateTimeOffset deserialization error");
+ }
+ }
+ }
+}
var ds = new DataContractSerializer (typeof (DateTimeOffset));
var sw = new StringWriter ();
string xml = "<DateTimeOffset xmlns:i='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://schemas.datacontract.org/2004/07/System'><DateTime>2011-03-01T02:05:06.078Z</DateTime><OffsetMinutes>120</OffsetMinutes></DateTimeOffset>".Replace ('\'', '"');
+
var v = new DateTimeOffset (new DateTime (2011, 3, 1, 4, 5, 6, 78), TimeSpan.FromMinutes (120));
using (var xw = XmlWriter.Create (sw, settings)) {
ds.WriteObject (xw, v);
Assert.AreEqual (xml, sw.ToString (), "#1");
Assert.AreEqual (v, ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ()))), "#2");
}
+
+ [Test]
+ public void DateTimeOffsetNullableSerialization ()
+ {
+ var ds = new DataContractSerializer (typeof (DateTimeOffset?));
+ var sw = new StringWriter ();
+ string xml = "<DateTimeOffset xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/System\"><DateTime>2012-05-04T00:34:00Z</DateTime><OffsetMinutes>120</OffsetMinutes></DateTimeOffset>";
+
+ var v = new DateTimeOffset (new DateTime (2012, 05, 04, 02, 34, 0), TimeSpan.FromMinutes (120));
+ using (var xw = XmlWriter.Create (sw, settings)) {
+ ds.WriteObject (xw, v);
+ }
+ Assert.AreEqual (xml, sw.ToString (), "#1");
+ Assert.AreEqual (v, ds.ReadObject (XmlReader.Create (new StringReader (sw.ToString ()))), "#2");
+ }
[Test]
public void XmlDocumentSupport ()