An object that is an instance of a Prototypes.Prototype.
Inheritance: SObject
        private static double GetNumberMember(SProtoObject obj, string member)
        {
            var memberObj = SObject.Unbox(obj.Members[member]);

            if (memberObj is SNumber)
                return ((SNumber)memberObj).Value;
            else
                return -1;
        }
        private static string GetStringMember(SProtoObject obj, string member)
        {
            var memberObj = SObject.Unbox(obj.Members[member]);

            if (memberObj is SString)
                return ((SString)memberObj).Value;
            else
                return "";
        }
Esempio n. 3
0
        private static object TranslateDynamic(SProtoObject obj)
        {
            var returnObj = new ExpandoObject() as IDictionary<string, object>;

            foreach (var item in obj.Members)
            {
                var memberName = item.Key;
                // Do not translate back the prototype and super instances:
                if (memberName != SProtoObject.MEMBER_NAME_PROTOTYPE &&
                    memberName != SProtoObject.MEMBER_NAME_SUPER)
                {
                    var memberContent = SObject.Unbox(item.Value);
                    returnObj.Add(memberName, Translate(memberContent));
                }
            }

            return returnObj;
        }
Esempio n. 4
0
        /// <summary>
        /// Translates an <see cref="SObject"/> to a specific type.
        /// </summary>
        public static object Translate(SProtoObject obj, Type t)
        {
            var instance = Activator.CreateInstance(t);

            var fields = t
                .GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                .Where(f => f.GetCustomAttribute<CompilerGeneratedAttribute>() == null)
                .ToArray();

            foreach (var field in fields)
            {
                var varAttr = field.GetCustomAttribute<ScriptVariableAttribute>(false);
                if (varAttr != null)
                {
                    var identifier = field.Name;
                    if (!string.IsNullOrEmpty(varAttr.VariableName))
                        identifier = varAttr.VariableName;

                    var setValue = SObject.Unbox(obj.Members[identifier]);

                    try
                    {
                        field.SetValue(instance, Translate(setValue));
                    }
                    catch (Exception)
                    {
                        // This is most likely a type binding issue: Set null if the types don't fit!
                        field.SetValue(instance, null);
                    }
                }
                else
                {
                    var refAttr = field.GetCustomAttribute<ReferenceAttribute>(false);
                    if (refAttr != null)
                    {
                        var identifier = field.Name;
                        if (!string.IsNullOrEmpty(refAttr.VariableName))
                            identifier = refAttr.VariableName;

                        field.SetValue(instance, obj.ReferenceContainer[identifier]);
                    }
                }
            }

            return instance;
        }
Esempio n. 5
0
        private static SObject TranslateExpandoObject(ScriptProcessor processor, ExpandoObject objIn)
        {
            var obj = new SProtoObject();
            
            foreach (var member in objIn)
                obj.AddMember(member.Key, Translate(processor, member.Value));

            return obj;
        }