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);
        }
示例#2
0
        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)));
 }
示例#5
0
        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);
        }