ln.json/ln.json/JSONArray.cs

96 lines
2.5 KiB
C#

using System;
using System.Text;
using System.Collections.Generic;
using ln.json.mapping;
namespace ln.json
{
public class JSONArray : JSONValue
{
public override IEnumerable<JSONValue> 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<JSONValue> values = new List<JSONValue>();
public JSONArray()
: base(JSONValueType.ARRAY) { }
public JSONArray(IEnumerable<JSONValue> values)
: base(JSONValueType.ARRAY)
{
this.values.AddRange(values);
}
public static JSONArray From<T>(IEnumerable<T> 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<JSONValue> 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<JSONValue> 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<OT> GetValues<OT>()
{
foreach (var value in values)
{
if (value is OT otValue)
yield return otValue;
}
}
}
}