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 = ""; 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 = "2012-05-04T04:34:00Z-120"; 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"); } } } }