ln.json/ln.json/JSONArray.cs

96 lines
2.5 KiB
C#
Raw Permalink Normal View History

2017-11-03 13:13:09 +01:00
using System;
2017-10-26 16:41:14 +02:00
using System.Text;
using System.Collections.Generic;
2019-08-29 14:16:55 +02:00
using ln.json.mapping;
2017-10-26 16:41:14 +02:00
2019-08-07 23:02:00 +02:00
namespace ln.json
2017-10-26 16:41:14 +02:00
{
2019-08-07 23:02:00 +02:00
public class JSONArray : JSONValue
{
public override IEnumerable<JSONValue> Children => Values;
public override bool HasChildren => true;
2019-08-08 00:34:16 +02:00
public int Count => values.Count;
2019-08-29 14:16:55 +02:00
public override object ToNative()
{
return JSONMapper.DefaultMapper.FromJson(this, typeof(object[]));
}
2019-08-07 23:02:00 +02:00
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);
}
2019-08-07 23:02:00 +02:00
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; }
2019-08-07 23:02:00 +02:00
public JSONArray Add(JSONValue value){ values.Add(value); return this; }
public JSONArray Remove(int index) { values.RemoveAt(index); return this; }
2023-08-17 11:46:46 +02:00
public override JSONValue Clone()
{
JSONArray copy = new JSONArray();
foreach (var value in values)
copy.Add(value.Clone());
return copy;
}
2019-08-07 23:02:00 +02:00
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();
}
2022-12-12 22:31:00 +01:00
public IEnumerable<OT> GetValues<OT>()
{
foreach (var value in values)
{
if (value is OT otValue)
yield return otValue;
}
}
2019-08-07 23:02:00 +02:00
}
2017-10-26 16:41:14 +02:00
}