public static void Serializer_throws_JsonSerializationException_when_a_constructor_parameter_is_missing_in_json_and_that_parameter_is_a_property_on_the_child_type() { var catJson1 = "{\"numberOfLives\":9,\"name\":\"Cleo\"}"; var catJson2 = "{\"numberOfLives\":9,\"age\":3}"; var jsonSerializer = new NaosJsonSerializer(typeof(GenericDiscoveryJsonConfiguration <Animal>)); var ex1 = Assert.Throws <JsonSerializationException>(() => jsonSerializer.Deserialize <Animal>(catJson1)); var ex2 = Assert.Throws <JsonSerializationException>(() => jsonSerializer.Deserialize <Animal>(catJson2)); ex1.Message.Should().StartWith("The json payload could not be deserialized into any of the candidate types."); ex2.Message.Should().StartWith("The json payload could not be deserialized into any of the candidate types."); }
public static void Serializer_deserialize_to_only_child_type_that_strictly_matches_json_when_json_can_deserialize_into_multiple_child_types() { var noLightingJson = "{}"; var incandescentJson = "{\"watts\":60}"; var jsonSerializer = new NaosJsonSerializer(typeof(GenericDiscoveryJsonConfiguration <Lighting>)); var noLighting = jsonSerializer.Deserialize <Lighting>(noLightingJson) as NoLighting; var incandescent = jsonSerializer.Deserialize <Lighting>(incandescentJson) as Incandescent; noLighting.Should().NotBeNull(); incandescent.Should().NotBeNull(); incandescent.Watts.Should().Be(60); }
public static void Deserialize___Should_return_object_of_type_CalendarYearAccountingPeriodSystem___When_an_object_of_that_type_is_serialized_to_json_and_deserialized_as_AccountingPeriodSystem() { // Arrange var serializer = new NaosJsonSerializer(); var originalAccountingPeriodSystem = new CalendarYearAccountingPeriodSystem(); var serializedJsonBytes = serializer.SerializeToBytes(originalAccountingPeriodSystem); var serializedJsonString = serializer.SerializeToString(originalAccountingPeriodSystem); // Act var systemUnderTest1 = serializer.Deserialize <AccountingPeriodSystem>(serializedJsonBytes); var systemUnderTest2 = serializer.Deserialize <AccountingPeriodSystem>(serializedJsonString); // Assert systemUnderTest1.Should().BeOfType <CalendarYearAccountingPeriodSystem>(); systemUnderTest2.Should().BeOfType <CalendarYearAccountingPeriodSystem>(); }
public static void ElementTypeOfArrayIsOnlyTypeDiscovered() { // Arrange var bsonConfig = typeof(GenericDiscoveryBsonConfiguration <RegisteredKey, RegisteredValue>); var bsonSerializer = new NaosBsonSerializer(bsonConfig); var jsonConfig = typeof(GenericDiscoveryJsonConfiguration <RegisteredKey, RegisteredValue>); var jsonSerializer = new NaosJsonSerializer(jsonConfig); var expectedKey = new RegisteredKey { Property = A.Dummy <string>() }; var expectedValue = new RegisteredValue { Property = A.Dummy <string>() }; var expectedTuple = new Tuple <RegisteredKey, RegisteredValue>(expectedKey, expectedValue); var expectedDictionary = new Dictionary <RegisteredKey, RegisteredValue> { { expectedKey, expectedValue } }; var expectedList = new List <RegisteredKey>(new[] { expectedKey }); var expectedArray = new[] { expectedValue }; // Act // var tupleBsonString = bsonSerializer.SerializeToString(expectedTuple); // var tupleBson = bsonSerializer.Deserialize<Tuple<RegisteredKey, RegisteredValue>>(tupleBsonString); var tupleJsonString = jsonSerializer.SerializeToString(expectedTuple); var tupleJson = jsonSerializer.Deserialize <Tuple <RegisteredKey, RegisteredValue> >(tupleJsonString); var dictionaryJsonString = jsonSerializer.SerializeToString(expectedDictionary); var dictionaryJson = jsonSerializer.Deserialize <Dictionary <RegisteredKey, RegisteredValue> >(dictionaryJsonString); var listJsonString = jsonSerializer.SerializeToString(expectedList); var listJson = jsonSerializer.Deserialize <List <RegisteredKey> >(listJsonString); var arrayJsonString = jsonSerializer.SerializeToString(expectedArray); var arrayJson = jsonSerializer.Deserialize <RegisteredValue[]>(arrayJsonString); // Assert // tupleBson.Should().BeEquivalentTo(expectedTuple); tupleJson.Item1.Property.Should().Be(expectedTuple.Item1.Property); tupleJson.Item2.Property.Should().Be(expectedTuple.Item2.Property); dictionaryJson.Single().Key.Property.Should().Be(expectedDictionary.Single().Key.Property); dictionaryJson.Single().Value.Property.Should().Be(expectedDictionary.Single().Value.Property); listJson.Single().Property.Should().Be(expectedList.Single().Property); arrayJson.Single().Property.Should().Be(expectedArray.Single().Property); }
public static void Deserialize___Should_return_equivalent_object_of_type_FiscalYearAccountingPeriodSystem___When_an_object_of_that_type_is_serialized_to_json_and_deserialized_as_AccountingPeriodSystem() { // Arrange var serializer = new NaosJsonSerializer(); var expectedAccountingPeriodSystem = new FiscalYearAccountingPeriodSystem(A.Dummy <MonthOfYear>().ThatIsNot(MonthOfYear.December)); var serializedJsonBytes = serializer.SerializeToBytes(expectedAccountingPeriodSystem); var serializedJsonString = serializer.SerializeToString(expectedAccountingPeriodSystem); // Act var systemUnderTest1 = serializer.Deserialize <AccountingPeriodSystem>(serializedJsonBytes) as FiscalYearAccountingPeriodSystem; var systemUnderTest2 = serializer.Deserialize <AccountingPeriodSystem>(serializedJsonString) as FiscalYearAccountingPeriodSystem; // Assert systemUnderTest1.Should().NotBeNull(); systemUnderTest1.LastMonthInFiscalYear.Should().Be(expectedAccountingPeriodSystem.LastMonthInFiscalYear); systemUnderTest2.Should().NotBeNull(); systemUnderTest2.LastMonthInFiscalYear.Should().Be(expectedAccountingPeriodSystem.LastMonthInFiscalYear); }
public static void JsonCanSerializeNull() { // Arrange var serializer = new NaosJsonSerializer(); // Act var actualNullString = serializer.SerializeToString(null); var actualNullBytes = serializer.SerializeToBytes(null); var actualString = serializer.SerializeToString(SerializationConfigurationBase.NullSerializedStringValue); var actualNullFromString = serializer.Deserialize <NullableObject>(actualNullString); var actualNullFromBytes = serializer.Deserialize <NullableObject>(actualNullBytes); var actual = serializer.Deserialize <string>(actualString); // Assert actualNullString.Should().Be(SerializationConfigurationBase.NullSerializedStringValue); actualNullFromString.Should().BeNull(); actualNullFromBytes.Should().BeNull(); actualString.Should().NotBe(SerializationConfigurationBase.NullSerializedStringValue); actual.Should().Be(SerializationConfigurationBase.NullSerializedStringValue); }
public static void JsonSerializeStringToBytes() { // Arrange var jsonSerializer = new NaosJsonSerializer <GenericDiscoveryJsonConfiguration <string> >(); var input = A.Dummy <string>(); // Act var actualJsonBytes = jsonSerializer.SerializeToBytes(input); var actualJsonFromBytes = jsonSerializer.Deserialize <string>(actualJsonBytes); // Assert actualJsonFromBytes.Should().Be(input); }
public static void Deserialize___Should_return_equivalent_object_of_type_CalendarDay___When_an_object_of_that_type_is_serialized_to_json_and_deserialized_as_abstract_type() { // Arrange var serializer = new NaosJsonSerializer(); var expectedUnitOfTime = A.Dummy <CalendarDay>(); var serializedJsonBytes = serializer.SerializeToBytes(expectedUnitOfTime); var serializedJsonString = serializer.SerializeToBytes(expectedUnitOfTime); // Act var systemUnderTest1a = serializer.Deserialize <UnitOfTime>(serializedJsonBytes) as CalendarDay; var systemUnderTest1b = serializer.Deserialize <CalendarUnitOfTime>(serializedJsonBytes) as CalendarDay; var systemUnderTest2a = serializer.Deserialize <UnitOfTime>(serializedJsonString) as CalendarDay; var systemUnderTest2b = serializer.Deserialize <CalendarUnitOfTime>(serializedJsonString) as CalendarDay; // Assert systemUnderTest1a.Should().Be(expectedUnitOfTime); systemUnderTest1b.Should().Be(expectedUnitOfTime); systemUnderTest2a.Should().Be(expectedUnitOfTime); systemUnderTest2b.Should().Be(expectedUnitOfTime); }
public static void RoundtripSerializeDeserialize___Using_local_negative_offset___Works() { // Arrange var expected = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); var serializer = new NaosJsonSerializer(); // Act var serialized = serializer.SerializeToString(expected); var actual = serializer.Deserialize <DateTime>(serialized); // Assert actual.Kind.Should().Be(expected.Kind); actual.Should().Be(expected); }
public static void RoundtripSerializeDeserialize___Using_unspecified___Works() { // Arrange var expected = DateTime.UtcNow.ToUnspecified(); var serializer = new NaosJsonSerializer(); // Act var serialized = serializer.SerializeToString(expected); var actual = serializer.Deserialize <DateTime>(serialized); // Assert actual.Kind.Should().Be(expected.Kind); actual.Should().Be(expected); }
public static void Deserialize___Null_type___Throws() { // Arrange var serializer = new NaosJsonSerializer(); Action action = () => serializer.Deserialize(string.Empty, null); // Act var exception = Record.Exception(action); // Assert exception.Should().NotBeNull(); exception.Should().BeOfType <ArgumentNullException>(); exception.Message.Should().Be("Parameter 'type' is null."); }
public static void Deserialize___Should_return_equivalent_object_of_type_FiftyTwoFiftyThreeWeekAccountingPeriodSystem___When_an_object_of_that_type_is_serialized_to_json_and_deserialized_as_AccountingPeriodSystem() { // Arrange var serializer = new NaosJsonSerializer(); var expectedAccountingPeriodSystem = A.Dummy <FiftyTwoFiftyThreeWeekAccountingPeriodSystem>(); var serializedJsonBytes = serializer.SerializeToBytes(expectedAccountingPeriodSystem); var serializedJsonString = serializer.SerializeToString(expectedAccountingPeriodSystem); // Act var systemUnderTest1 = serializer.Deserialize <AccountingPeriodSystem>(serializedJsonBytes) as FiftyTwoFiftyThreeWeekAccountingPeriodSystem; var systemUnderTest2 = serializer.Deserialize <AccountingPeriodSystem>(serializedJsonString) as FiftyTwoFiftyThreeWeekAccountingPeriodSystem; // Assert systemUnderTest1.Should().NotBeNull(); systemUnderTest1.AnchorMonth.Should().Be(expectedAccountingPeriodSystem.AnchorMonth); systemUnderTest1.FiftyTwoFiftyThreeWeekMethodology.Should().Be(expectedAccountingPeriodSystem.FiftyTwoFiftyThreeWeekMethodology); systemUnderTest1.LastDayOfWeekInAccountingYear.Should().Be(expectedAccountingPeriodSystem.LastDayOfWeekInAccountingYear); systemUnderTest2.Should().NotBeNull(); systemUnderTest2.AnchorMonth.Should().Be(expectedAccountingPeriodSystem.AnchorMonth); systemUnderTest2.FiftyTwoFiftyThreeWeekMethodology.Should().Be(expectedAccountingPeriodSystem.FiftyTwoFiftyThreeWeekMethodology); systemUnderTest2.LastDayOfWeekInAccountingYear.Should().Be(expectedAccountingPeriodSystem.LastDayOfWeekInAccountingYear); }
public static void Serializer_deserialize_inherited_types_with_constructors() { var dogJson = "{\"name\":\"Barney\",\"furColor\":\"brindle\",\"age\":10,\"dogTag\":\"my name is Barney\"}"; var catJson = "{\"numberOfLives\":9,\"name\":\"Cleo\",\"age\":3}"; var tigerJson = "{\"tailLength\":2,\"name\":\"Ronny\",\"numberOfTeeth\":50,\"age\":5}"; var mouseJson = "{\"tailLength\":8,\"name\":\"Missy\",\"furColor\":\"black\",\"age\":7}"; var jsonSerializer = new NaosJsonSerializer(typeof(GenericDiscoveryJsonConfiguration <Animal>)); var dog = jsonSerializer.Deserialize <Animal>(dogJson) as Dog; var cat = jsonSerializer.Deserialize <Animal>(catJson) as Cat; var tiger = jsonSerializer.Deserialize <Animal>(tigerJson) as Tiger; var mouse = jsonSerializer.Deserialize <Animal>(mouseJson) as Mouse; dog.Should().NotBeNull(); dog.Name.Should().Be("Barney"); dog.Age.Should().Be(10); dog.FurColor.Should().Be(FurColor.Brindle); dog.DogTag.Should().Be("my name is Barney"); cat.Should().NotBeNull(); cat.Name.Should().Be("Cleo"); cat.Age.Should().Be(3); cat.NumberOfLives.Should().Be(9); tiger.Should().NotBeNull(); tiger.Name.Should().Be("Ronny"); tiger.Age.Should().Be(5); tiger.TailLength.Should().Be(2); tiger.NumberOfTeeth.Should().Be(50); mouse.Should().NotBeNull(); mouse.Name.Should().Be("Missy"); mouse.Age.Should().Be(7); mouse.TailLength.Should().Be(8); mouse.FurColor.Should().Be(FurColor.Black); }