void SelectCode(JToken token) { JProperty JpToken = token.ToObject <JProperty>(); if (JpToken.Name == "Field") { foreach (var internalField in JpToken.Children().Children()) { CustomType type = TypeStack.Peek(); TypeStack.Push(GetField(internalField, type)); foreach (var nextToken in internalField) { SelectCode(nextToken); } TypeStack.Pop(); } } else if (JpToken.Name == "Property") { foreach (var internalProperty in JpToken.Children().Children()) { CustomType type = TypeStack.Peek(); TypeStack.Push(GetProperty(internalProperty, type)); foreach (var nextToken in internalProperty) { SelectCode(nextToken); } TypeStack.Pop(); } } else if (JpToken.Name == "Value" || JpToken.Name == "Constructor") { var customType = TypeStack.Pop(); var type = customType.Value.GetType(); object value = null; if (JpToken.Name == "Value") { value = Convert.ChangeType(JpToken.Value, type); } else { var list = GetParsing(JpToken); ConstructorInfo constructor = type.GetConstructor(list.Select((data) => data.type).ToArray()); value = constructor?.Invoke(list.Select((data) => data.value).ToArray()); } customType.SetValue(TypeStack.Peek().Value, value); TypeStack.Push(customType); } else if (JpToken.Name == "CallFunc") { var q = JpToken.Value["Param"]; var customType = TypeStack.Peek(); var list = GetParsing(q); var type = list.Select((data) => data.type).ToArray(); var value = list.Select((data) => data.value).ToArray(); MethodInfo t = customType.Type.GetMethod(JpToken.Value["Name"].ToString()); t?.Invoke(customType.Value, value.Length == 0 ? null : value); } else if (JpToken.Name == "EventHandler") { var customType = TypeStack.Pop(); EventInfo info = customType.Type.GetEvent(JpToken.Value["Name"].ToString()); MethodInfo minfo = TypeStack.Peek().Type.GetMethod(JpToken.Value["Method"].ToString()); Delegate method = Delegate.CreateDelegate(info.EventHandlerType, TypeStack.Peek().Value, minfo); info.AddEventHandler(customType.Value, method); TypeStack.Push(customType); } }
public CustomType Add(CustomType Item) { List.Add(Item); return(Item); }
public CustomType GetFunction(JToken token, CustomType type) { return(new CustomType(null)); }