protected abstract JsonElement GetValue(JsonElement context);
public JsonElement Run(JsonElement context, JsonElement value, Boolean file = false) { if (Next == null) { return JsonEncodeLastValue(context, value, file); } else { return JsonEncodeValue(context, value, file); } }
protected override JsonElement SetValue(JsonElement context, JsonElement value) { var array = context as JsonArray; if (array != null) { array[Key] = value; } else { context[Key.ToString()] = value; } return value; }
protected abstract JsonElement SetValue(JsonElement context, JsonElement value);
protected override JsonElement GetValue(JsonElement context) { var array = context as JsonArray; if (array == null) { return context[Key.ToString()]; } return array[Key]; }
protected override JsonElement SetValue(JsonElement context, JsonElement value) { context[Key] = value; return value; }
protected override JsonElement GetValue(JsonElement context) { return context[Key]; }
JsonElement JsonEncodeLastValue(JsonElement context, JsonElement value, Boolean file) { var currentValue = GetValue(context); //undefined if (currentValue == null) { if (Append) { var arr = new JsonArray(); arr.Push(value); value = arr; } SetValue(context, value); } else if (currentValue is JsonArray) { ((JsonArray)currentValue).Push(value); } else if (currentValue is JsonObject && !file) { var step = new ObjectStep(String.Empty); return step.JsonEncodeLastValue(currentValue, value, file: true); } else { var arr = new JsonArray(); arr.Push(currentValue); arr.Push(value); SetValue(context, arr); } return context; }
JsonElement JsonEncodeValue(JsonElement context, JsonElement value, Boolean file) { var currentValue = GetValue(context); if (currentValue == null) { var newValue = Next.CreateElement(); return SetValue(context, newValue); } else if (currentValue is JsonObject) { return currentValue; } else if (currentValue is JsonArray) { return SetValue(context, Next.ConvertArray((JsonArray)currentValue)); } else { var obj = new JsonObject { [String.Empty] = currentValue }; return SetValue(context, obj); } }