/// <summary> /// Tries to parse a string of json and determine is <see cref="JsonValue"/> type. /// </summary> /// <param name="json">A string of json that should be parsed.</param> /// <param name="value">The output <see cref="JsonValue"/> created if successful. If not successful, a <see cref="JsonNull"/> se set to <paramref name="value"/>.</param> /// <returns>Returns true if <see cref="JsonValue"/> was successfully created; otherwise false is returned.</returns> public static bool TryParse(string json, out JsonValue value) { if (string.IsNullOrEmpty(json)) { value = new JsonNull(); return true; } if (json.StartsWith("{", StringComparison.CurrentCulture) && json.EndsWith("}", StringComparison.Ordinal)) { value = new JsonObject(json); return true; } if (json.StartsWith("[") && json.EndsWith("]")) { value = new JsonArray(json); return true; } if (json.StartsWith("\"") && json.EndsWith("\"")) { json = json.Substring(1, json.Length - 2); if (json.StartsWith("base64:")) value = new JsonBinary(json); else value = new JsonString(json); return true; } decimal v; bool bv; if (decimal.TryParse(json, out v)) { value = new JsonNumber(v); return true; } if (bool.TryParse(json, out bv)) { value = new JsonBoolean(bv); return true; } value = null; return false; }
/// <summary> /// Creates a new instance of the specified type, provided by the constructor. /// </summary> /// <returns>Returns the newly created instance.</returns> public object AddNew() { if (newPos != -1) this.OnListChanged(ListChangedType.ItemAdded, newPos); JsonValue newValue = null; if (vtype == typeof(JsonString)) newValue = new JsonString(); else if (vtype == typeof(JsonNumber)) newValue = new JsonNumber(); else if (vtype == typeof(JsonBoolean)) newValue = new JsonBoolean(); else if (vtype == typeof(JsonObject)) { JsonObject obj = new JsonObject(); foreach (PropertyDescriptor prop in props) obj.Add(prop.Name, (JsonValue)Activator.CreateInstance(prop.PropertyType)); newValue = obj; } if (newValue != null) { newPos = List.Add(newValue); this.Position = newPos; } return newValue; }