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(); }
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; }
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; }
/// <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; }