public void TestMethod3() { ResetTestState(); Console.WriteLine(MethodBase.GetCurrentMethod().Name); var v1 = new CTestClassCollectionsAtom(); v1.Init1(); Console.WriteLine("Key1:"); IKey key = IKeyFactory.CreateKey("RootKey"); _serializer.Serialize(v1, key, this); string text = key.SaveToString(); Console.WriteLine(text); int mem_sz = key.GetMemorySize(); byte[] array = new byte[mem_sz]; key.BinarySerialize(array, 0); Console.WriteLine($"Array Size: {array.Length} bytes"); Console.WriteLine("Key2:"); IKey key2 = IKeyFactory.CreateKey(array, 0); text = key2.SaveToString(); Console.WriteLine(text); var v2 = _serializer.Deserialize <CTestClassCollectionsAtom>(key2, this); CheckInternalErrors(); Assert.AreEqual(v1, v2); }
public IKey SerializeToKey(object instance, string inRootName, ILogPrinter inLogger) { IKey root = IKeyFactory.CreateKey(inRootName); Serialize(instance, root, inLogger); return(root); }
public void TestMethod1() { ResetTestState(); Console.WriteLine(MethodBase.GetCurrentMethod().Name); CTestBase v1 = new CTestBase(); v1.Init1(); Console.WriteLine("Key1:"); IKey key = IKeyFactory.CreateKey("RootKey"); _serializer.Serialize(v1, key, this); string text = key.SaveToString(); //BaseInt: 7 //BaseNullable: 9 //BaseFloat: 101.909 //BaseString: str2 //BaseEnum: TestEnumValue3 Console.WriteLine(text); //string input = "sun"; //byte[] array = Encoding.UTF8.GetBytes(input); int mem_sz = key.GetMemorySize(); byte[] array = new byte[mem_sz]; key.BinarySerialize(array, 0); Console.WriteLine($"Array Size: {array.Length} bytes"); Console.WriteLine("Key2:"); IKey key2 = IKeyFactory.CreateKey(array, 0); text = key2.SaveToString(); Console.WriteLine(text); var v2 = _serializer.Deserialize <CTestBase>(key2, this); CheckInternalErrors(); Assert.AreEqual(v1, v2); }
public void AddToContainer(object LeObject, Type LeObjectConcreteType, string LeObjectsName) { _objectContainerStore.Add(_objectContainerFactory.CreateContainer(LeObject, _keyFactory.CreateKey(LeObjectConcreteType, LeObjectsName))); }
object DeserializeClass(object inInstance, IKey inKey, Type type, int inStructDeep, ILogPrinter inLogger) { IKey type_key = inKey.GetChild("RealObjectType"); if (type_key != null) { string type_name = type_key.GetValueAsString(0); string assembly_name = type_key.GetValueAsString(1); try { Assembly assembly = Assembly.Load(assembly_name); Type obj_type = assembly.GetType(type_name, true); if (obj_type != null) { type = obj_type; } } catch (Exception ex) { LogError(inLogger, string.Format("Cant take type from RealObjectType {0}. Exception: {1}", type_name, ex.Message)); } } object instance = inInstance; if (instance == null) { instance = _reflectionProvider.Instantiate(type, inLogger); } if (instance != null) { //MethodInfo mi = type.GetMethod("DeserializationFromCscd", new Type[] { typeof(CascadeParser.IKey), typeof(CascadeParser.ILogPrinter) }); MethodInfo mi = type.GetMethod("DeserializationFromCscd", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (mi != null) { if (inKey != null && !inKey.IsEmpty) { IKey key = inKey; mi.Invoke(instance, new object[] { key, inLogger }); } } else { MemberInfo[] member_infos = _reflectionProvider.GetSerializableMembers(type); foreach (MemberInfo memberInfo in member_infos) { SCustomMemberParams member_params = GetMemberParams(memberInfo); Type memberType = memberInfo.GetMemberType(); IKey sub_key = inKey.GetChild(member_params.ChangedName); if (sub_key == null) { sub_key = inKey.GetChild(member_params.Name); } if (sub_key != null) { object readValue; if (member_params.Converter != null) { readValue = member_params.Converter.ReadKey(sub_key, inLogger); } else { readValue = DeserializeInternal(null, sub_key, memberType, 0, inStructDeep + 1, inLogger); } // This dirty check is naive and doesn't provide performance benefits //if (memberType.IsClass && readValue != currentValue && (readValue == null || !readValue.Equals(currentValue))) _reflectionProvider.SetValue(memberInfo, instance, readValue, inLogger); } else if (member_params.DefaultValue != null) { _reflectionProvider.SetValue(memberInfo, instance, member_params.DefaultValue, inLogger); } else if (memberType.IsClass || memberType.IsStruct()) { object already_exists_member = _reflectionProvider.GetValue(memberInfo, instance); if (already_exists_member != null) { //for set default values inside this object already_exists_member = DeserializeInternal(already_exists_member, IKeyFactory.CreateKey(string.Empty), memberType, 0, inStructDeep + 1, inLogger); if (already_exists_member != null) { _reflectionProvider.SetValue(memberInfo, instance, already_exists_member, inLogger); } } } } } mi = type.GetMethod("OnDeserializedMethod", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (mi != null) { var context = new StreamingContext(StreamingContextStates.Other); mi.Invoke(instance, new object[] { context }); } } return(instance); }