public void ReadValue(JsonAction <object, JsonValueType> value, JsonAction readArray, JsonAction readObject) { if (value is null) { throw new ArgumentNullException(nameof(value)); } if (readArray is null) { throw new ArgumentNullException(nameof(readArray)); } if (readObject is null) { throw new ArgumentNullException(nameof(readObject)); } if (Stacks.Peek().ArrayType != JsonArrayType.Unknown) { readArray(); return; } if (Stacks.Peek().ObjectType != JsonObjectType.Unknown) { readObject(); return; } Stacks.Peek().IsInitialized = true; if (Stacks.Peek().Instance is null) { value(null, JsonValueType.Null); return; } if (Stacks.Peek().Type is null) { Stacks.Peek().Type = Stacks.Peek().Instance.GetType(); } if (JsonApi.TryGetValueType(Stacks.Peek().Type, out JsonValueType valueType, Config)) { value(Stacks.Peek().Instance, valueType); return; } if (JsonApi.TryGetArrayType(Stacks.Peek().Type, out Stacks.Peek().ArrayType)) { readArray(); return; } if (JsonApi.TryGetObjectType(Stacks.Peek().Type, out Stacks.Peek().ObjectType)) { readObject(); return; } throw new JsonNotSupportException(Stacks.Peek().Type); }
public void Write(object value) { if (value is JsonValue jsonValue) { new JsonTextBuilder(new JsonValueReader(jsonValue, Config), this, Config).BuildValue(); return; } if (value is JsonArray array) { new JsonTextBuilder(new JsonValueReader(array, Config), this, Config).BuildArray(); return; } if (value is JsonObject jsonObject) { new JsonTextBuilder(new JsonValueReader(jsonObject, Config), this, Config).BuildObject(); return; } if (JsonApi.TryGetValueType(value, out JsonValueType valueType, Config)) { Write(value, valueType); return; } new JsonTextBuilder(new JsonSerializer(value, Config), this, Config).BuildValue(); }