Example #1
0
        /** Add
         *
         *      IndexArray。追加。
         *
         */
        public void Add(ModeAddIndexArray a_mode, JsonItem a_to_jsonitem, System.Object a_from_listitem_object, System.Type a_from_listitem_type, ConvertToJsonItemOption a_from_option, int a_nest)
        {
            WorkPool_Item t_item = new WorkPool_Item();

            {
                //mode
                t_item.mode = (int)a_mode;

                //nest
                t_item.nest = a_nest;

                //コンバート元、インスタンス。
                t_item.from_fieldinfo     = null;
                t_item.from_parent_object = null;
                t_item.from_object        = a_from_listitem_object;
                t_item.from_type          = a_from_listitem_type;
                t_item.from_option        = a_from_option;

                //コンバート先。JSON。
                t_item.to_jsonitem   = a_to_jsonitem;
                t_item.to_index      = 0;
                t_item.to_key_string = null;
            }
            this.list.Add(t_item);
        }
Example #2
0
        /** 更新。
         */
        public void Main()
        {
            while (true)
            {
                int t_count = this.list.Count;
                if (t_count > 0)
                {
                    WorkPool_Item t_current_work = this.list[t_count - 1];
                    this.list.RemoveAt(t_count - 1);
                    if (this.Main_Item(t_current_work) == false)
                    {
                        //エラー。
                        this.list.Clear();

                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                        DebugTool.Assert(false);
                                                #endif
                    }

                    //たぶん無限ループ。
                    if (t_count > Config.POOL_MAX)
                    {
                        this.list.Clear();

                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                        DebugTool.Assert(false);
                                                #endif
                    }
                }
                else
                {
                    break;
                }
            }
        }
Example #3
0
        /** Add
         *
         *      FieldInfo。
         *
         */
        public void Add(ModeFieldInfo a_mode, JsonItem a_to_jsonitem, System.Reflection.FieldInfo a_from_fieldinfo, System.Object a_from_parent_object, int a_nest)
        {
            WorkPool_Item t_item = new WorkPool_Item();

            {
                //モード。
                t_item.mode = (int)a_mode;

                //ネスト。
                t_item.nest = a_nest;

                //コンバート元、インスタンス。
                t_item.from_fieldinfo     = a_from_fieldinfo;
                t_item.from_parent_object = a_from_parent_object;
                t_item.from_object        = null;
                t_item.from_type          = null;
                t_item.from_option        = ConvertToJsonItemOption.None;

                //コンバート先。JSON。
                t_item.to_jsonitem   = a_to_jsonitem;
                t_item.to_index      = 0;
                t_item.to_key_string = null;
            }
            this.list.Add(t_item);
        }
Example #4
0
        /** AddFirst
         *
         *      Enumerable
         *
         */
        public void AddFirst(ModeIEnumerable a_mode, JsonItem a_from_member_jsonitem, System.Collections.IEnumerable a_to_enumerable, System.Reflection.MethodInfo a_to_methodinfo, System.Type a_to_listitem_type)
        {
            WorkPool_Item t_item = new WorkPool_Item();

            {
                //モード。
                t_item.mode = (int)a_mode;

                //設定元。
                t_item.from_value_jsonitem = a_from_member_jsonitem;
                t_item.from_key_jsonitem   = null;

                //設定先。
                t_item.to_value_type    = a_to_listitem_type;
                t_item.to_key_type      = null;
                t_item.to_value_object  = null;
                t_item.to_key_object    = null;
                t_item.to_list          = null;
                t_item.to_index         = 0;
                t_item.to_dictionary    = null;
                t_item.to_fieldinfo     = null;
                t_item.to_parent_object = null;
                t_item.to_enumerable    = a_to_enumerable;
                t_item.to_methodinfo    = a_to_methodinfo;
            }
            this.list.AddFirst(t_item);
        }
Example #5
0
        /** AddFirst
         *
         *      Dictionary。追加。
         *
         */
        public void AddFirst(ModeAddStringDictionary a_mode, JsonItem a_from_listitem_jsonitem, string a_from_key_string, System.Collections.IDictionary a_to_dictionary, System.Type a_to_listitem_type)
        {
            WorkPool_Item t_item = new WorkPool_Item();

            {
                //モード。
                t_item.mode = (int)a_mode;

                //設定元。
                t_item.from_value_jsonitem = a_from_listitem_jsonitem;
                t_item.from_key_jsonitem   = null;

                //設定先。
                t_item.to_value_type    = a_to_listitem_type;
                t_item.to_key_type      = null;
                t_item.to_value_object  = null;
                t_item.to_key_object    = a_from_key_string;
                t_item.to_list          = null;
                t_item.to_index         = 0;
                t_item.to_dictionary    = a_to_dictionary;
                t_item.to_fieldinfo     = null;
                t_item.to_parent_object = null;
                t_item.to_enumerable    = null;
                t_item.to_methodinfo    = null;
            }
            this.list.AddFirst(t_item);
        }
Example #6
0
        /** AddFirst
         *
         *      List。設定。
         *
         */
        public void AddFirst(ModeSetList a_mode, JsonItem a_from_listitem_json, System.Collections.IList a_to_list, int a_to_index, System.Type a_to_listitem_type)
        {
            WorkPool_Item t_item = new WorkPool_Item();

            {
                //モード。
                t_item.mode = (int)a_mode;

                //設定元。
                t_item.from_value_jsonitem = a_from_listitem_json;
                t_item.from_key_jsonitem   = null;

                //設定先。
                t_item.to_value_type    = a_to_listitem_type;
                t_item.to_key_type      = null;
                t_item.to_value_object  = null;
                t_item.to_key_object    = null;
                t_item.to_list          = a_to_list;
                t_item.to_index         = a_to_index;
                t_item.to_dictionary    = null;
                t_item.to_fieldinfo     = null;
                t_item.to_parent_object = null;
                t_item.to_enumerable    = null;
                t_item.to_methodinfo    = null;
            }
            this.list.AddFirst(t_item);
        }
Example #7
0
        /** 更新。
         */
        private bool Main_Item(WorkPool_Item a_item)
        {
            switch (a_item.mode)
            {
            case (int)ModeAddIndexArray.Start:
            {
                //IndexArray。追加。

                JsonItem t_jsonitem_listitem = null;

                if (a_item.nest < Config.CONVERTNEST_MAX)
                {
                    t_jsonitem_listitem = ConvertObjectToJsonItem.Convert(a_item.from_object, a_item.from_type, a_item.from_option, this, a_item.nest + 1);
                }
                else
                {
                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                    DebugTool.Assert(false);
                                                #endif

                    return(false);
                }

                if (a_item.to_jsonitem != null)
                {
                    a_item.to_jsonitem.AddItem(t_jsonitem_listitem, false);
                }
                else
                {
                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                    DebugTool.Assert(false);
                                                #endif

                    return(false);
                }
            } return(true);

            case (int)ModeSetIndexArray.Start:
            {
                //IndexArray。設定。

                JsonItem t_jsonitem_listitem = null;

                if (a_item.nest < Config.CONVERTNEST_MAX)
                {
                    t_jsonitem_listitem = ConvertObjectToJsonItem.Convert(a_item.from_object, a_item.from_type, a_item.from_option, this, a_item.nest + 1);
                }
                else
                {
                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                    DebugTool.Assert(false);
                                                #endif

                    return(false);
                }

                if (a_item.to_jsonitem != null)
                {
                    a_item.to_jsonitem.SetItem(a_item.to_index, t_jsonitem_listitem, false);
                }
                else
                {
                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                    DebugTool.Assert(false);
                                                #endif

                    return(false);
                }
            } return(true);

            case (int)ModeAddAssociativeArray.Start:
            {
                //AssociativeArray。追加。

                JsonItem t_jsonitem_member = null;

                if (a_item.nest < Config.CONVERTNEST_MAX)
                {
                    t_jsonitem_member = ConvertObjectToJsonItem.Convert(a_item.from_object, a_item.from_type, a_item.from_option, this, a_item.nest + 1);
                }
                else
                {
                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                    DebugTool.Assert(false);
                                                #endif

                    return(false);
                }

                if (a_item.to_jsonitem != null)
                {
                    a_item.to_jsonitem.SetItem(a_item.to_key_string, t_jsonitem_member, false);
                }
                else
                {
                                                #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                    DebugTool.Assert(false);
                                                #endif

                    return(false);
                }
            } return(true);

            case (int)ModeFieldInfo.Start:
            {
                //FieldInfo。

                //ENUMの文字列化。
                if (a_item.from_fieldinfo.IsDefined(typeof(EnumString), false) == true)
                {
                    a_item.from_option = ConvertToJsonItemOption.EnumString;
                }
                else
                {
                    a_item.from_option = ConvertToJsonItemOption.None;
                }

                System.Object t_raw = a_item.from_fieldinfo.GetValue(a_item.from_parent_object);
                if (t_raw != null)
                {
                    JsonItem t_jsonitem_member = null;

                    if (a_item.nest < Config.CONVERTNEST_MAX)
                    {
                        t_jsonitem_member = ConvertObjectToJsonItem.Convert(t_raw, t_raw.GetType(), a_item.from_option, this, a_item.nest + 1);
                    }
                    else
                    {
                                                        #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                        DebugTool.Assert(false);
                                                        #endif

                        return(false);
                    }

                    if (a_item.to_jsonitem != null)
                    {
                        a_item.to_jsonitem.SetItem(a_item.from_fieldinfo.Name, t_jsonitem_member, false);
                    }
                    else
                    {
                                                        #if (DEF_BLUEBACK_JSONITEM_ASSERT)
                        DebugTool.Assert(false);
                                                        #endif

                        return(false);
                    }
                }
                else
                {
                    //NULL処理。
                }
            } return(true);
            }

            return(false);
        }
Example #8
0
        /** 更新。
         */
        private void Main_Item(WorkPool_Item a_item)
        {
            switch (a_item.mode)
            {
            case (int)ModeSetList.Start:
            {
                //List。設定。

                //JsonItemから型を決める。
                if (a_item.to_value_type == typeof(System.Object))
                {
                    a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem);
                }

                //インスタンス作成。
                CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);

                if (a_item.to_value_type.IsClass == true)
                {
                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //リストに設定。
                    a_item.to_list[a_item.to_index] = a_item.to_value_object;
                }
                else
                {
                    //差し込み位置。
                    System.Collections.Generic.LinkedListNode <WorkPool_Item> t_first_node = this.list.First;

                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //再登録。
                    a_item.mode = (int)ModeSetList.Fix;

                    //差し込み。
                    if (t_first_node != null)
                    {
                        this.list.AddBefore(t_first_node, a_item);
                    }
                    else
                    {
                        this.list.AddLast(a_item);
                    }
                }
            } break;

            case (int)ModeSetList.Fix:
            {
                //List。設定。

                //リストに設定。
                a_item.to_list[a_item.to_index] = a_item.to_value_object;
            } break;

            case (int)ModeAddList.Start:
            {
                //List。追加。

                //JsonItemから型を決める。
                if (a_item.to_value_type == typeof(System.Object))
                {
                    a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem);
                }

                //インスタンス作成。
                CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);

                if (a_item.to_value_type.IsClass == true)
                {
                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //リストに設定。
                    a_item.to_list.Add(a_item.to_value_object);
                }
                else
                {
                    //差し込み位置。
                    System.Collections.Generic.LinkedListNode <WorkPool_Item> t_first_node = this.list.First;

                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //再登録。
                    a_item.mode = (int)ModeAddList.Fix;

                    //差し込み。
                    if (t_first_node != null)
                    {
                        this.list.AddBefore(t_first_node, a_item);
                    }
                    else
                    {
                        this.list.AddLast(a_item);
                    }
                }
            } break;

            case (int)ModeAddList.Fix:
            {
                //List。追加。

                //リストに追加。
                a_item.to_list.Add(a_item.to_value_object);
            } break;

            case (int)ModeAddStringDictionary.Start:
            {
                //Dictionary。追加。

                //JsonItemから型を決める。
                if (a_item.to_value_type == typeof(System.Object))
                {
                    a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem);
                }

                //インスタンス作成。
                CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);

                if (a_item.to_value_type.IsClass == true)
                {
                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //リストに設定。
                    a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object);
                }
                else
                {
                    //差し込み位置。
                    System.Collections.Generic.LinkedListNode <WorkPool_Item> t_first_node = this.list.First;

                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //再登録。
                    a_item.mode = (int)ModeAddStringDictionary.Fix;

                    //差し込み。
                    if (t_first_node != null)
                    {
                        this.list.AddBefore(t_first_node, a_item);
                    }
                    else
                    {
                        this.list.AddLast(a_item);
                    }
                }
            } break;

            case (int)ModeAddStringDictionary.Fix:
            {
                //Dictionary。追加。

                //リストに追加。
                {
                    a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object);
                }
            } break;

            case (int)ModeAddAnyDictionary.Start:
            {
                //Dictionary。追加。

                //JsonItemから型を決める。
                if (a_item.to_key_type == typeof(System.Object))
                {
                    a_item.to_key_type = ValueType_ConvertToType.Get(a_item.from_key_jsonitem);
                }

                //JsonItemから型を決める。
                if (a_item.to_value_type == typeof(System.Object))
                {
                    a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem);
                }

                if ((a_item.to_key_type.IsClass == true) && (a_item.to_value_type.IsClass == true))
                {
                    //キーの作成。
                    CreateInstance.Create(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem);
                    ConvertJsonItemToObject.Convert(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem, this);

                    //値の作成。
                    CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //リストに設定。
                    a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object);
                }
                else
                {
                    //差し込み位置。
                    System.Collections.Generic.LinkedListNode <WorkPool_Item> t_first_node = this.list.First;

                    //キーの作成。
                    CreateInstance.Create(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem);
                    ConvertJsonItemToObject.Convert(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem, this);

                    //値の作成。
                    CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //再登録。
                    a_item.mode = (int)ModeAddAnyDictionary.Fix;

                    //差し込み。
                    if (t_first_node != null)
                    {
                        this.list.AddBefore(t_first_node, a_item);
                    }
                    else
                    {
                        this.list.AddLast(a_item);
                    }
                }
            } break;

            case (int)ModeAddAnyDictionary.Fix:
            {
                //Dictionary。追加。

                //リストに追加。
                {
                    a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object);
                }
            } break;

            case (int)ModeFieldInfo.Start:
            {
                //FieldInfo。

                //JsonItemから型を決める。
                if (a_item.to_value_type == typeof(System.Object))
                {
                    a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem);
                }

                //インスタンスの作成。
                CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);

                if (a_item.to_value_type.IsClass == true)
                {
                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //フィールドに設定。
                    a_item.to_fieldinfo.SetValue(a_item.to_parent_object, a_item.to_value_object);
                }
                else
                {
                    //差し込み位置。
                    System.Collections.Generic.LinkedListNode <WorkPool_Item> t_first_node = this.list.First;

                    //メンバーの設定。
                    ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                    //再登録。
                    a_item.mode = (int)ModeFieldInfo.Fix;

                    //差し込み。
                    if (t_first_node != null)
                    {
                        this.list.AddBefore(t_first_node, a_item);
                    }
                    else
                    {
                        this.list.AddLast(a_item);
                    }
                }
            } break;

            case (int)ModeFieldInfo.Fix:
            {
                //FieldInfo。

                //フィールドに設定。
                a_item.to_fieldinfo.SetValue(a_item.to_parent_object, a_item.to_value_object);
            } break;

            case (int)ModeIEnumerable.Start_Param1:
            {
                //Generic.Stack
                //Generic.LinkedList
                //Generic.HashSet
                //Generic.Queue
                //Generic.SortedSet

                //JsonItemから型を決める。
                if (a_item.to_value_type == typeof(System.Object))
                {
                    a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem);
                }

                System.Type t_generic_type = ReflectionTool.ReflectionTool.GetGenericTypeDefinition(a_item.to_enumerable.GetType());

                //インスタンス作成。
                CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem);

                //■メンバーの設定。
                ConvertJsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this);

                //パラメータリスト。
                this.temp_parameter_list_1[0] = a_item.to_value_object;

                //呼び出し。
                {
                    a_item.to_methodinfo.Invoke(a_item.to_enumerable, this.temp_parameter_list_1);
                }
            } break;
            }
        }