public static Object FromJsValue(this JsValue val)
        {
            switch (val.Type)
            {
                case Types.Boolean:
                    return val.AsBoolean();
                case Types.Number:
                    return val.AsNumber();
                case Types.String:
                    return val.AsString();
                case Types.Object:
                    var obj = val.AsObject();
                    var node = obj as DomNodeInstance;

                    if (node != null)
                        return node.Value;

                    return obj;
                case Types.Undefined:
                    return "undefined";
                case Types.Null:
                    return null;
            }

            return val.ToObject();
        }
Exemple #2
0
        public static object Uncast(this JsValue value)
        {
            if (value.IsBoolean()) {
                return value.AsBoolean();
            }
            if (value.IsNumber()) {
                return value.AsNumber();
            }
            if (value.IsObject()) {
                return value.AsObject();
            }
            if (value.IsString()) {
                return value.AsString();
            }

            return null;
        }
Exemple #3
0
        internal static int CompareTo(this Value a, Value b)
        {
            a = a.Self();
            b = b.Self();

            if (a.IsNumber() && b.IsNumber())
                return a.AsNumber().CompareTo(b.AsNumber());

            if (a.Type != b.Type)
                return -2; // invalid

            switch (a.Type)
            {
                case GTType.Bool:
                    return ((GTBool)a).Value.CompareTo(((GTBool)b).Value);

                case GTType.Function:
                    return a == b ? 0 : -1;

                case GTType.List:
                    if (a.Count != b.Count)
                        return a.Count.CompareTo(b.Count);

                    for (int i = 0; i < a.Count; i++)
                    {
                        var comp = a[i].CompareTo(b[i]);

                        if (comp != 0)
                            return comp;
                    }

                    return 0;

                case GTType.String:
                    return ((GTString)a).Value.CompareTo(((GTString)b).Value);

                case GTType.Void:
                    return -1;
            }

            return -2;
        }
Exemple #4
0
        /// <summary>
        /// 判断给定的IP地址是否为内网IP。
        /// </summary>
        /// <param name="ipAddress">IP地址</param>
        /// <returns>是否为内网IP</returns>
        public static bool IsInnerIPAddress(this string ipAddress)
        {
            ipAddress = ipAddress == "::1" ? "127.0.0.1" : ipAddress;

            var ipNumber = ipAddress.AsNumber();

            // 私有IP:
            // A类:10.0.0.0-10.255.255.255
            // B类:172.16.0.0-172.31.255.255 
            // C类:192.168.0.0-192.168.255.255   
            // 当然,还有127这个网段是环回地址
            var aBegin = AsNumber("10.0.0.0");
            var aEnd = AsNumber("10.255.255.255");
            var bBegin = AsNumber("172.16.0.0");
            var bEnd = AsNumber("172.31.255.255");
            var cBegin = AsNumber("192.168.0.0");
            var cEnd = AsNumber("192.168.255.255");

            return InRange(ipNumber, aBegin, aEnd) ||
                InRange(ipNumber, bBegin, bEnd) ||
                InRange(ipNumber, cBegin, cEnd) ||
                ipAddress.Equals("127.0.0.1");
        }
 public static bool TryConvert(this IJsonValue value, out object propertyValue)
 {
     propertyValue = null;
     if (!value.IsNull())
     {
         switch (value.ValueType)
         {
             case JsonValueType.Boolean:
                 propertyValue = value.AsBool().Value;
                 break;
             case JsonValueType.Number:
                 propertyValue = value.AsNumber().Value;
                 break;
             case JsonValueType.String:
                 propertyValue = value.AsString();
                 break;
             case JsonValueType.Null:
                 break;
             case JsonValueType.Object:
             case JsonValueType.Array:
             default:
                 return false;
         }
     }
     return true;
 }
 /// <summary>
 /// Try to convert a value to a CLR object.
 /// </summary>
 /// <param name="value">The value to convert.</param>
 /// <param name="propertyValue">The converted value.</param>
 /// <returns>
 /// A value indicating whether the conversion was successful.
 /// </returns>
 public static bool TryConvert(this JToken value, out object propertyValue)
 {
     propertyValue = null;
     if (!value.IsNull())
     {
         switch (value.Type)
         {
             case JTokenType.Boolean:
                 propertyValue = value.AsBool().Value;
                 break;
             case JTokenType.Float:
             case JTokenType.Integer:
                 propertyValue = value.AsNumber().Value;
                 break;
             case JTokenType.String:
                 propertyValue = value.AsString();
                 break;
             case JTokenType.Date:
                 propertyValue = value.ToObject<DateTime>().ToRoundtripDateString(); //win8 store json data serialization doesn't have Date type, and is always returning string type, we should do the same
                 break;
             case JTokenType.Null:
                 break;
             case JTokenType.Object:
             case JTokenType.Array:
             default:
                 return false;
         }
     }
     return true;
 }
 /// <summary>
 /// Try to convert a value to a CLR object.
 /// </summary>
 /// <param name="value">The value to convert.</param>
 /// <param name="propertyValue">The converted value.</param>
 /// <returns>
 /// A value indicating whether the conversion was successful.
 /// </returns>
 public static bool TryConvert(this JToken value, out object propertyValue)
 {
     propertyValue = null;
     if (!value.IsNull())
     {
         switch (value.Type)
         {
             case JTokenType.Boolean:
                 propertyValue = value.AsBool().Value;
                 break;
             case JTokenType.Float:
             case JTokenType.Integer:
                 propertyValue = value.AsNumber().Value;
                 break;
             case JTokenType.String:
                 propertyValue = value.AsString();
                 break;
             case JTokenType.Date:
                 propertyValue = value.ToObject<DateTime>(); // AsDateTime() doesn't make sense since DateTime is a reference not object type.  (Can't use 'as' operator)
                 break;
             case JTokenType.Null:
                 break;
             case JTokenType.Object:
             case JTokenType.Array:
             default:
                 return false;
         }
     }
     return true;
 }