Wrap() public method

public Wrap ( ModelInstance instance ) : object
instance ModelInstance
return object
コード例 #1
0
ファイル: EntityWrapper.cs プロジェクト: cognitoforms/ExoWeb
        protected override object GetMissingPropertyValue(string jsPropertyName)
        {
            // special meta property
            if (jsPropertyName == "meta")
            {
                return(LazyDefineProperty("meta", new Meta(Engine, RealObject)));
            }

            // handle model properties
            string modelPropertyName;

            if (jsPropertyName.StartsWith(GetterPrefix))
            {
                modelPropertyName = jsPropertyName.Substring(GetterPrefix.Length);
            }
            else if (jsPropertyName.StartsWith(SetterPrefix))
            {
                throw new InvalidOperationException("Properties are read-only");
            }
            else
            {
                throw new InvalidOperationException("Only property get accessors are supported on model objects: " + jsPropertyName);
            }

            ModelProperty property = RealObject.Type.Properties[modelPropertyName];

            if (property == null)
            {
                throw new InvalidPropertyException(RealObject.Type, modelPropertyName);
            }

            if (property is ModelValueProperty)
            {
                // optimization: cast outside of delegate
                ModelValueProperty valueProperty = (ModelValueProperty)property;

                return(LazyDefineMethod(jsPropertyName, instance =>
                {
                    var value = instance.GetValue(valueProperty);

                    if (value is decimal)
                    {
                        return decimal.ToDouble((decimal)value);
                    }

                    if (value is float)
                    {
                        return Convert.ToDouble((float)value);
                    }

                    if (value is long)
                    {
                        return Convert.ToInt32((long)value);
                    }

                    if (value is DateTime)
                    {
                        var dateTime = (DateTime)value;

                        // Use the same serialization format as `JsonUtility.UtcDateTimeConverter`.
                        var dateString = dateTime.ToUniversalTime().ToString(@"yyyy-MM-dd\THH:mm:ss.fff\Z");

                        var jsDate = Engine.Date.Construct(dateString);

                        return jsDate;
                    }

                    return value;
                }));
            }

            ModelReferenceProperty refProperty = (ModelReferenceProperty)property;

            if (refProperty.IsList)
            {
                return(LazyDefineMethod(jsPropertyName, instance =>
                {
                    return factory.Wrap(instance.GetList(refProperty));
                }));
            }
            else
            {
                return(LazyDefineMethod(jsPropertyName, instance =>
                {
                    return factory.Wrap(instance.GetReference(refProperty));
                }));
            }
        }
コード例 #2
0
ファイル: Marshaler.cs プロジェクト: cognitoforms/ExoWeb
            public override object CallLateBound(object thisObject, params object[] argumentValues)
            {
                object result = impl.DynamicInvoke(argumentValues.Select(marshaler.Unwrap).ToArray());

                return(marshaler.Wrap(result));
            }