Skip to content

Commit f73ba60

Browse files
authored
CSHARP-3181: Change DateTimeOffset default serialization (#1473)
1 parent f4ee102 commit f73ba60

File tree

3 files changed

+68
-111
lines changed

3 files changed

+68
-111
lines changed

src/MongoDB.Bson/Serialization/Serializers/DateTimeOffsetSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private static class Flags
4040
/// Initializes a new instance of the <see cref="DateTimeOffsetSerializer"/> class.
4141
/// </summary>
4242
public DateTimeOffsetSerializer()
43-
: this(BsonType.Array)
43+
: this(BsonType.Document)
4444
{
4545
}
4646

tests/MongoDB.Bson.Tests/Serialization/Serializers/DateTimeOffsetSerializerTests.cs

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ namespace MongoDB.Bson.Tests.Serialization.Serializers
2727
public class DateTimeOffsetSerializerTests
2828
{
2929
[Fact]
30-
public void constructor_with_no_arguments_should_return_expected_result()
30+
public void Constructor_with_no_arguments_should_return_expected_result()
3131
{
3232
var subject = new DateTimeOffsetSerializer();
3333

34-
subject.Representation.Should().Be(BsonType.Array);
34+
subject.Representation.Should().Be(BsonType.Document);
3535
}
3636

3737
[Theory]
3838
[ParameterAttributeData]
39-
public void constructor_with_representation_should_return_expected_result(
39+
public void Constructor_with_representation_should_return_expected_result(
4040
[Values(BsonType.Array, BsonType.DateTime, BsonType.Document, BsonType.String)] BsonType representation)
4141
{
4242
var subject = new DateTimeOffsetSerializer(representation);
@@ -45,7 +45,7 @@ public void constructor_with_representation_should_return_expected_result(
4545
}
4646

4747
[Fact]
48-
public void constructor_with_representation_should_throw_when_representation_is_invalid()
48+
public void Constructor_with_representation_should_throw_when_representation_is_invalid()
4949
{
5050
var exception = Record.Exception(() => new DateTimeOffsetSerializer(BsonType.Null));
5151

@@ -111,6 +111,69 @@ public void Deserialize_should_be_forgiving_of_actual_numeric_types(string json,
111111
result.Should().Be(DateTimeOffset.Parse(expectedResult));
112112
}
113113

114+
[Fact]
115+
public void Equals_null_should_return_false()
116+
{
117+
var x = new DateTimeOffsetSerializer(BsonType.Array);
118+
119+
var result = x.Equals(null);
120+
121+
result.Should().Be(false);
122+
}
123+
124+
[Fact]
125+
public void Equals_object_should_return_false()
126+
{
127+
var x = new DateTimeOffsetSerializer(BsonType.Array);
128+
var y = new object();
129+
130+
var result = x.Equals(y);
131+
132+
result.Should().Be(false);
133+
}
134+
135+
[Fact]
136+
public void Equals_self_should_return_true()
137+
{
138+
var x = new DateTimeOffsetSerializer(BsonType.Array);
139+
140+
var result = x.Equals(x);
141+
142+
result.Should().Be(true);
143+
}
144+
145+
[Fact]
146+
public void Equals_with_equal_fields_should_return_true()
147+
{
148+
var x = new DateTimeOffsetSerializer(BsonType.Array);
149+
var y = new DateTimeOffsetSerializer(BsonType.Array);
150+
151+
var result = x.Equals(y);
152+
153+
result.Should().Be(true);
154+
}
155+
156+
[Fact]
157+
public void Equals_with_not_equal_field_should_return_false()
158+
{
159+
var x = new DateTimeOffsetSerializer(BsonType.Array);
160+
var y = new DateTimeOffsetSerializer(BsonType.DateTime);
161+
162+
var result = x.Equals(y);
163+
164+
result.Should().Be(false);
165+
}
166+
167+
[Fact]
168+
public void GetHashCode_should_return_zero()
169+
{
170+
var x = new DateTimeOffsetSerializer(BsonType.Array);
171+
172+
var result = x.GetHashCode();
173+
174+
result.Should().Be(0);
175+
}
176+
114177
[Theory]
115178
[InlineData(BsonType.Array, "0001-01-01T00:00:00Z", "{ \"x\" : [{ \"$numberLong\" : \"0\" }, { \"$numberInt\" : \"0\" }] }")]
116179
[InlineData(BsonType.Array, "1970-01-01T00:00:00Z", "{ \"x\" : [{ \"$numberLong\" : \"621355968000000000\" }, { \"$numberInt\" : \"0\" }] }")]

tests/MongoDB.Bson.Tests/Serialization/Serializers/NetPrimitiveSerializerTests.cs

Lines changed: 0 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -841,112 +841,6 @@ public void GetHashCode_should_return_zero()
841841
}
842842
}
843843

844-
public class DateTimeOffsetSerializerTests
845-
{
846-
public class TestClass
847-
{
848-
[BsonRepresentation(BsonType.Array)]
849-
public DateTimeOffset A { get; set; }
850-
[BsonRepresentation(BsonType.Document)]
851-
public DateTimeOffset D { get; set; }
852-
[BsonRepresentation(BsonType.String)]
853-
public DateTimeOffset S { get; set; }
854-
}
855-
856-
// TODO: more DateTimeOffset tests
857-
858-
[Fact]
859-
public void TestSerializeDateTimeOffset()
860-
{
861-
var value = new DateTimeOffset(new DateTime(2010, 10, 8, 11, 29, 0), TimeSpan.FromHours(-4));
862-
var isoDate = value.UtcDateTime.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFK", CultureInfo.InvariantCulture);
863-
var obj = new TestClass
864-
{
865-
A = value,
866-
D = value,
867-
S = value
868-
};
869-
var json = obj.ToJson(writerSettings: new JsonWriterSettings { OutputMode = JsonOutputMode.Shell });
870-
var expected = "{ 'A' : #A, 'D' : #D, 'S' : '#S' }";
871-
expected = expected.Replace("#A", string.Format("[NumberLong('{0}'), {1}]", value.DateTime.Ticks, value.Offset.TotalMinutes));
872-
expected = expected.Replace("#D",
873-
"{ 'DateTime' : ISODate('#D'), 'Ticks' : NumberLong('#T'), 'Offset' : #O }"
874-
.Replace("#D", isoDate)
875-
.Replace("#T", value.DateTime.Ticks.ToString())
876-
.Replace("#O", JsonConvert.ToString(value.Offset.TotalMinutes)));
877-
expected = expected.Replace("#S", "2010-10-08T11:29:00-04:00");
878-
expected = expected.Replace("'", "\"");
879-
Assert.Equal(expected, json);
880-
881-
var bson = obj.ToBson();
882-
var rehydrated = BsonSerializer.Deserialize<TestClass>(bson);
883-
Assert.True(bson.SequenceEqual(rehydrated.ToBson()));
884-
}
885-
886-
[Fact]
887-
public void Equals_null_should_return_false()
888-
{
889-
var x = new DateTimeOffsetSerializer(BsonType.Array);
890-
891-
var result = x.Equals(null);
892-
893-
result.Should().Be(false);
894-
}
895-
896-
[Fact]
897-
public void Equals_object_should_return_false()
898-
{
899-
var x = new DateTimeOffsetSerializer(BsonType.Array);
900-
var y = new object();
901-
902-
var result = x.Equals(y);
903-
904-
result.Should().Be(false);
905-
}
906-
907-
[Fact]
908-
public void Equals_self_should_return_true()
909-
{
910-
var x = new DateTimeOffsetSerializer(BsonType.Array);
911-
912-
var result = x.Equals(x);
913-
914-
result.Should().Be(true);
915-
}
916-
917-
[Fact]
918-
public void Equals_with_equal_fields_should_return_true()
919-
{
920-
var x = new DateTimeOffsetSerializer(BsonType.Array);
921-
var y = new DateTimeOffsetSerializer(BsonType.Array);
922-
923-
var result = x.Equals(y);
924-
925-
result.Should().Be(true);
926-
}
927-
928-
[Fact]
929-
public void Equals_with_not_equal_field_should_return_false()
930-
{
931-
var x = new DateTimeOffsetSerializer(BsonType.Array);
932-
var y = new DateTimeOffsetSerializer(BsonType.DateTime);
933-
934-
var result = x.Equals(y);
935-
936-
result.Should().Be(false);
937-
}
938-
939-
[Fact]
940-
public void GetHashCode_should_return_zero()
941-
{
942-
var x = new DateTimeOffsetSerializer(BsonType.Array);
943-
944-
var result = x.GetHashCode();
945-
946-
result.Should().Be(0);
947-
}
948-
}
949-
950844
public class DecimalSerializerTests
951845
{
952846
public class TestClass

0 commit comments

Comments
 (0)