/** 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); }
/** 更新。 */ 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; } } }
/** 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); }
/** 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); }
/** 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); }
/** 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); }
/** 更新。 */ 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); }
/** 更新。 */ 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; } }