private object AsPOJO(Jint.Native.JsValue JsValue) { if (JsValue.Type == Jint.Runtime.Types.Boolean) { return(Jint.Runtime.TypeConverter.ToBoolean(JsValue)); } else if (JsValue.Type == Jint.Runtime.Types.Number) { double AsDouble = Jint.Runtime.TypeConverter.ToNumber(JsValue); int AsInt = Jint.Runtime.TypeConverter.ToInt32(JsValue); var diff = Math.Abs(AsDouble - AsInt); if (diff < 0.00000001) { return(AsInt); } else { return(AsDouble); } } else if (JsValue.Type == Jint.Runtime.Types.String) { return(Jint.Runtime.TypeConverter.ToString(JsValue)); } else // if (JsValue.Type == Jint.Runtime.Types.Object) { Jint.Native.Object.ObjectInstance AsObject = JsValue.TryCast <Jint.Native.Object.ObjectInstance>(); if (AsObject is Jint.Native.Array.ArrayInstance) { int length = Jint.Runtime.TypeConverter.ToInt32(AsObject.Get("length")); object[] array = new object[length]; for (int i = 0; i < length; i++) { array[i] = AsPOJO(AsObject.Get(i.ToString())); } return(array); } else { Dictionary <string, object> AsDictionary = new Dictionary <string, object>(); foreach (string Property in AsObject.Properties.Keys) { AsDictionary.Add(Property, AsPOJO(AsObject.Get(Property))); } return(AsDictionary); } } }