96 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|