Пример #1
0
        /// <summary>
        ///     Converts a JavaScript value into a c# object (this does not affect private variable
        ///     only public properties / getters and setters).
        /// </summary>
        /// <param name="value">The value to convert.</param>
        /// <param name="type">The type of object you are expecting.</param>
        /// <returns>The converted object.</returns>
        public object FromJavaScriptValue(JavaScriptValue value, Type type)
        {
            var jsonObject = JavaScriptValue.GlobalObject.GetProperty(JavaScriptPropertyId.FromString("JSON"));
            var stringify  = jsonObject.GetProperty(JavaScriptPropertyId.FromString("stringify"));

            switch (value.ValueType)
            {
            case JavaScriptValueType.Undefined:
            case JavaScriptValueType.Null:
                return(null);

            case JavaScriptValueType.Number:
            {
                var number = stringify.CallFunction(JavaScriptValue.GlobalObject, value.ConvertToObject());
                return(JsonConvert.DeserializeObject(number.ToString(), type));
            }

            case JavaScriptValueType.String:
                return(value.ToString());

            case JavaScriptValueType.Boolean:
                return(value.ToBoolean());

            case JavaScriptValueType.Object:
            {
                var number = stringify.CallFunction(JavaScriptValue.GlobalObject, value.ConvertToObject());
                return(JsonConvert.DeserializeObject(number.ToString(), type));
            }

            case JavaScriptValueType.Function:

                // Somehow create a func to return back to c# that calls JS??

                return(null);

            case JavaScriptValueType.Array:
            {
                var number = stringify.CallFunction(JavaScriptValue.GlobalObject, value.ConvertToObject());
                return(JsonConvert.DeserializeObject(number.ToString(), type));
            }

            default:
                Console.WriteLine($"Type {value.ValueType} is not supported!");
                return(null);
            }
        }