using System; using System.Text; using System.Collections.Generic; using ln.json.mapping; namespace ln.json { public class JSONArray : JSONValue { public override IEnumerable Children => Values; public override bool HasChildren => true; public int Count => values.Count; public override object ToNative() { return JSONMapper.DefaultMapper.FromJson(this, typeof(object[])); } JSONValue[] Values { get => values.ToArray(); set { values.Clear(); values.AddRange(value); } } List values = new List(); public JSONArray() : base(JSONValueType.ARRAY) { } public JSONArray(IEnumerable values) : base(JSONValueType.ARRAY) { this.values.AddRange(values); } public static JSONArray From(IEnumerable values) where T:JSONValue { return new JSONArray(values); } public override JSONValue this[int index] { get => values[index]; set => values[index] = value; } public JSONArray Add(IEnumerable values){ foreach (JSONValue value in values) this.values.Add(value); return this; } public JSONArray Add(JSONValue value){ values.Add(value); return this; } public JSONArray Remove(int index) { values.RemoveAt(index); return this; } public override JSONValue Clone() { JSONArray copy = new JSONArray(); foreach (var value in values) copy.Add(value.Clone()); return copy; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); IEnumerator kenum = values.GetEnumerator(); if (kenum.MoveNext()) do { sb.Append(kenum.Current.ToString()); if (!kenum.MoveNext()) break; sb.Append(','); } while (true); sb.Append(']'); return sb.ToString(); } public IEnumerable GetValues() { foreach (var value in values) { if (value is OT otValue) yield return otValue; } } } }