public void SerializationOfBytesIsNotLossy() { var bin = new List <byte>(); for (int i = 1; i < 1000; i++) { bin.AddRange(BitConverter.GetBytes(i)); } var obj1 = new GeneralDTO { Bytes = bin.ToArray() }; var obj2 = new GeneralDTO { Bytes = null }; var obj1Bytes = BsonSerializer.Serialize(obj1); var obj2Bytes = BsonSerializer.Serialize(obj2); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj2Bytes); Assert.True(obj1.Bytes.SequenceEqual(hydratedObj1.Bytes)); Assert.Equal(null, hydratedObj2.Bytes); }
public void SerializationOfInheritenceIsNotLossy_EvenWhenDiscriminatorIsOnAnInterfaceAndWeTryToDeserializeUsingTheInterface() { var obj1 = new InterfaceDiscriminatedClass(); var hydratedObj1 = (InterfaceDiscriminatedClass)BsonDeserializer.Deserialize <IDiscriminated>(BsonSerializer.Serialize(obj1)); Assert.Equal(obj1.Id, hydratedObj1.Id); }
/// <summary> /// 从BSON二进制数组反序列化至指定类型的对象 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="bson">BSON二进制数组</param> /// <returns>指定类型的对象</returns> public static T DeserializeObject <T>(byte[] bson) where T : class { using (BsonDeserializer deserializer = new BsonDeserializer()) { return(deserializer.Deserialize <T>(bson)); } }
public void SerializationSpeedTest() { for (var i = 0; i < 5; i++) { var stopWatch = new Stopwatch(); stopWatch.Start(); for (var j = 0; j < 10000; j++) { var obj1 = new GeneralDTO { Title = null, ABoolean = true, AGuid = Guid.NewGuid(), AnInt = 1, Pi = 3.14, Nester = new GeneralDTO { Title = "Bob", AnInt = 42 } }; var obj1Bytes = BsonSerializer.Serialize(obj1); BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); } stopWatch.Stop(); Console.WriteLine(stopWatch.ElapsedMilliseconds); } }
public void SerializesWithPrivateSetter() { var start = new PrivateSetter(4); var bytes = BsonSerializer.Serialize(start); var end = BsonDeserializer.Deserialize <PrivateSetter>(bytes); Assert.Equal(start.Id, end.Id); }
public void WillDeserializeObjectWithPrivateConstructor() { var start = PrivateConstructor.Create("Darren Kopp"); var bytes = BsonSerializer.Serialize(start); var end = BsonDeserializer.Deserialize <PrivateConstructor>(bytes); Assert.Equal(start.Name, end.Name); }
public void DoesntSerializeIgnoredProperties() { var o = new GeneralDTO { IgnoredProperty = 4 }; Assert.Equal(0, BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(o)).IgnoredProperty); }
public void SerializesAndDeserializesAFloat() { var o = new GeneralDTO { AFloat = 1.4f }; Assert.Equal(1.4f, BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(o)).AFloat); }
public void SerializationOfEmptyListIsNotLossy() { var obj1Bytes = BsonSerializer.Serialize(new GeneralDTO { AList = new List <string>() }); var obj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); Assert.True(obj2.AList != null); }
public void SerializationOfInheritenceIsNotLossy() { var obj1 = new SubClassedObject { Title = "Subclassed", ABool = true }; var hydratedObj1 = BsonDeserializer.Deserialize <SubClassedObject>(BsonSerializer.Serialize(obj1)); Assert.Equal(obj1.Title, hydratedObj1.Title); Assert.Equal(obj1.ABool, hydratedObj1.ABool); }
public void SerializationOfFlyweightIsNotLossy() { var testObj = new Expando(); testObj["astring"] = "stringval"; var testBytes = BsonSerializer.Serialize(testObj); var hydrated = BsonDeserializer.Deserialize <Expando>(testBytes); Assert.Equal(testObj["astring"], hydrated["astring"]); }
public void SerializationOfInheritenceIsNotLossy_EvenWhenWeAskForTheBaseType() { var obj1 = new SubClassedObject { Title = "The Title", ABool = true }; var hydratedObj1 = (SubClassedObject)BsonDeserializer.Deserialize <SuperClassObject>(BsonSerializer.Serialize(obj1)); Assert.Equal(obj1.Title, hydratedObj1.Title); Assert.Equal(obj1.ABool, hydratedObj1.ABool); }
public void SerializesAndDeserializesAComplexObject() { var obj1 = new GeneralDTO { Flags64 = Flags64.FlagOff, Flags32 = Flags32.FlagOn, Pi = 2d, AnInt = 3, Title = "telti", ABoolean = false, Strings = new[] { "a", "bb", "abc" }, Bytes = new byte[] { 1, 2, 3 }, AGuid = Guid.NewGuid(), ADateTime = new DateTime(2001, 4, 8, 10, 43, 23, 104), ARex = new Regex("it's over (9000)", RegexOptions.IgnoreCase) }; var nested = new GeneralDTO { Pi = 43d, Title = "little", ARex = new Regex("^over (9000)$") }; obj1.Nester = nested; var obj2 = new GeneralDTO(); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(obj1)); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(obj2)); Assert.Equal(obj1.Pi, hydratedObj1.Pi); Assert.Equal(obj1.AnInt, hydratedObj1.AnInt); Assert.Equal(obj1.Title, hydratedObj1.Title); Assert.Equal(obj1.ABoolean, hydratedObj1.ABoolean); Assert.Equal(obj1.Bytes, hydratedObj1.Bytes); Assert.Equal(obj1.AGuid, hydratedObj1.AGuid); Assert.Equal(obj1.ADateTime.Value.ToUniversalTime().Ticks, hydratedObj1.ADateTime.Value.ToUniversalTime().Ticks); Assert.Equal(obj1.Strings, hydratedObj1.Strings); Assert.Equal(obj1.Flags32, hydratedObj1.Flags32); Assert.Equal(obj1.Flags64, hydratedObj1.Flags64); Assert.Equal(obj1.Nester.Title, hydratedObj1.Nester.Title); Assert.Equal(obj1.Nester.Pi, hydratedObj1.Nester.Pi); Assert.Equal(obj1.ARex.ToString(), hydratedObj1.ARex.ToString()); Assert.Equal(obj1.ARex.Options, hydratedObj1.ARex.Options); Assert.Equal(obj2.Pi, hydratedObj2.Pi); Assert.Equal(obj2.AnInt, hydratedObj2.AnInt); Assert.Equal(obj2.Title, hydratedObj2.Title); Assert.Equal(obj2.ABoolean, hydratedObj2.ABoolean); Assert.Equal(obj2.Bytes, hydratedObj2.Bytes); Assert.Equal(obj2.AGuid, hydratedObj2.AGuid); Assert.Equal(obj2.ADateTime, hydratedObj2.ADateTime); Assert.Equal(obj2.Strings, hydratedObj2.Strings); Assert.Equal(obj2.Flags32, hydratedObj2.Flags32); Assert.Equal(obj2.Flags64, hydratedObj2.Flags64); Assert.Equal(obj2.Nester, hydratedObj2.Nester); Assert.Equal(obj2.ARex, hydratedObj2.ARex); }
public void SerializesReadonlyList() { var start = new ReadOnlyList(); start.Names.Add("Duncan Idaho"); var bytes = BsonSerializer.Serialize(start); var end = BsonDeserializer.Deserialize <ReadOnlyList>(bytes); Assert.Equal(1, end.Names.Count); Assert.Equal("Duncan Idaho", end.Names[0]); }
public void SerializesCultureInfo() { var s1 = new CultureInfoDTO() { Culture = CultureInfo.GetCultureInfo("en-US") }; var bytes = BsonSerializer.Serialize(s1); var s2 = BsonDeserializer.Deserialize <CultureInfoDTO>(bytes); Assert.Equal(s1.Culture, s2.Culture); }
public void RecursiveNestedTypesDontCauseInfiniteLoop() { var obj1 = new GeneralDTO { Title = "Hello World", Nester = new GeneralDTO { Title = "Bob", AnInt = 42 } }; var obj1Bytes = BsonSerializer.Serialize(obj1); BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); }
public void SerializesReadonlyDictionary() { var start = new ReadOnlyDictionary(); start.Names.Add("Duncan Idaho", 2); var bytes = BsonSerializer.Serialize(start); var end = BsonDeserializer.Deserialize <ReadOnlyDictionary>(bytes); Assert.Equal(1, end.Names.Count); Assert.Equal("Duncan Idaho", end.Names.ElementAt(0).Key); Assert.Equal(2, end.Names.ElementAt(0).Value); }
public void SerializesExtraPropertiesToExpandoCollection() { var address = new Address { City = "Arrakeen", State = "Arrakis", Street = "1 Grand Palace Way", Zip = "sp1c3" }; var bytes = BsonSerializer.Serialize(address); var expando = BsonDeserializer.Deserialize <ExpandoAddress>(bytes); Assert.Equal(expando.City, address.City); Assert.Equal(expando.Street, address.Street); Assert.Equal(expando["State"], address.State); Assert.Equal(expando["Zip"], address.Zip); }
public void SerializesReadonlyICollection() { var start = new HashSetList(); start.Names.Add("Duncan"); start.Names.Add("Idaho"); var bytes = BsonSerializer.Serialize(start); var end = BsonDeserializer.Deserialize <HashSetList>(bytes); Assert.Equal(2, end.Names.Count); Assert.Equal("Duncan", end.Names.ElementAt(0)); Assert.Equal("Idaho", end.Names.ElementAt(1)); }
public void SerializationOfIEnumerableTIsNotLossy() { var gto = new GeneralDTO { AnIEnumerable = new List <Person>() { new Person(), new Person() } }; var bytes = BsonSerializer.Serialize(gto); var gto2 = BsonDeserializer.Deserialize <GeneralDTO>(bytes); Assert.Equal(2, gto2.AnIEnumerable.Count()); }
public void check_it_converts_sensibly() { var serializer = new BsonSerializer(_mappingRegistry); var deserializer = new BsonDeserializer(_mappingRegistry, _typeCreator); var expectedModel = SerializationTestHelper.GeneratePopulatedModel(); var data = serializer.Serialize(expectedModel); _testOutputHelper.WriteLine("Outputted Bson: "); _testOutputHelper.WriteLine(BitConverter.ToString(data.AsBytes)); var actualModel = deserializer.Deserialize <ComplexModel>(data); SerializationTestHelper.AssertPopulatedData(expectedModel, actualModel); }
public void SerializationOfEnumIsNotLossy() { var obj1 = new GeneralDTO { Flags32 = Flags32.FlagOn, Flags64 = Flags64.FlagOff }; var obj2 = new GeneralDTO(); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(obj1)); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(obj2)); Assert.Equal(obj1.Flags32, hydratedObj1.Flags32); Assert.Equal(null, hydratedObj2.Flags32); Assert.Equal(obj1.Flags64, hydratedObj1.Flags64); Assert.Equal(null, hydratedObj2.Flags64); }
public void SerializationOfFlyweightListsInsideFlyweightWorks() { var testObj = new Expando(); testObj["astring"] = "stringval"; var innerObj = new List <Expando>(); var innerInnerObject = new Expando(); innerInnerObject["innerInnerValue"] = "aStringOfDoom"; innerObj.Add(innerInnerObject); testObj["InnerObject"] = innerObj; var testBytes = BsonSerializer.Serialize(testObj); var hydrated = BsonDeserializer.Deserialize <Expando>(testBytes); Assert.Equal(testObj["InnerObject"].GetType(), hydrated["InnerObject"].GetType()); }
public void SerializationOfNestedObjectsIsNotLossy() { var obj1 = new GeneralDTO { Title = "Hello World", Nester = new GeneralDTO { Title = "Bob", AnInt = 42 } }; var obj1Bytes = BsonSerializer.Serialize(obj1); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); Assert.Equal(obj1.Title, hydratedObj1.Title); Assert.Equal(obj1.Nester.Title, hydratedObj1.Nester.Title); Assert.Equal(obj1.Nester.AnInt, hydratedObj1.Nester.AnInt); }
public void SerializationOfScopedCodeIsNotLossy() { var obj1 = new GeneralDTO { Code = new ScopedCode { CodeString = "function(){return 'hello world!'}" } }; var scope = new Expando(); scope["$ns"] = "root"; obj1.Code.Scope = scope; var obj2 = BsonDeserializer.Deserialize <GeneralDTO>(BsonSerializer.Serialize(obj1)); Assert.Equal(obj1.Code.CodeString, obj2.Code.CodeString); Assert.Equal(((Expando)obj1.Code.Scope)["$ns"], ((Expando)obj2.Code.Scope)["$ns"]); }
public void SerializationOfGuidIsNotLossy() { var obj1 = new GeneralDTO { AGuid = Guid.NewGuid() }; var obj2 = new GeneralDTO { AGuid = null }; var obj1Bytes = BsonSerializer.Serialize(obj1); var obj2Bytes = BsonSerializer.Serialize(obj2); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj2Bytes); Assert.Equal(obj1.AGuid, hydratedObj1.AGuid); Assert.Equal(null, hydratedObj2.AGuid); }
public void SerializationOfStringsAreNotLossy() { var obj1 = new GeneralDTO { Title = null }; var obj2 = new GeneralDTO { Title = "Hello World" }; var obj1Bytes = BsonSerializer.Serialize(obj1); var obj2Bytes = BsonSerializer.Serialize(obj2); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj2Bytes); Assert.Equal(null, hydratedObj1.Title); Assert.Equal(obj2.Title, hydratedObj2.Title); }
public void SerializationOfBooleansAreNotLossy() { var obj1 = new GeneralDTO { ABoolean = true }; var obj2 = new GeneralDTO { ABoolean = null }; var obj1Bytes = BsonSerializer.Serialize(obj1); var obj2Bytes = BsonSerializer.Serialize(obj2); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj2Bytes); Assert.Equal(obj1.ABoolean, hydratedObj1.ABoolean); Assert.Equal(null, hydratedObj2.ABoolean); }
public void SerializationOfDoublesAreNotLossy() { var obj1 = new GeneralDTO { Pi = 3.1415927d }; var obj2 = new GeneralDTO { Pi = null }; var obj1Bytes = BsonSerializer.Serialize(obj1); var obj2Bytes = BsonSerializer.Serialize(obj2); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj2Bytes); Assert.Equal(obj1.Pi, hydratedObj1.Pi); Assert.Equal(null, hydratedObj2.Pi); }
public void SerializationOfIntsAreNotLossy() { var obj1 = new GeneralDTO { AnInt = 100 }; var obj2 = new GeneralDTO { AnInt = null }; var obj1Bytes = BsonSerializer.Serialize(obj1); var obj2Bytes = BsonSerializer.Serialize(obj2); var hydratedObj1 = BsonDeserializer.Deserialize <GeneralDTO>(obj1Bytes); var hydratedObj2 = BsonDeserializer.Deserialize <GeneralDTO>(obj2Bytes); Assert.Equal(obj1.AnInt, hydratedObj1.AnInt); Assert.Equal(null, hydratedObj2.AnInt); }