using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Serein.Library.Api
{
///
/// JSON数据交互的Token接口,允许使用不同的JSON库进行数据处理。
///
public interface IJsonToken
{
///
/// 获取当前Token的类型,可能是值、对象或数组。
///
TokenType Type { get; }
///
/// 获取当前Token的类型,可能是值、对象或数组。
///
public enum TokenType
{
///
/// 表示一个值类型的Token,例如字符串、数字或布尔值。
///
Value,
///
/// 表示一个对象类型的Token,通常是一个键值对集合。
///
Object,
///
/// 表示一个数组类型的Token,通常是一个元素列表。
///
Array,
}
///
/// 获取 Token
///
///
///
IJsonToken this[object name] { get; }
///
/// 获取指定名称的属性,如果存在则返回true,并通过out参数返回对应的IJsonToken对象。
///
///
///
///
bool TryGetValue(string name, out IJsonToken token);
///
/// 获取指定名称的属性值,如果不存在则返回null。
///
///
///
#nullable enable
IJsonToken? GetValue(string name);
///
/// 获取当前Token的字符串值,如果是null则返回null。
///
///
string GetString();
///
/// 获取当前Token的整数值,如果是null则抛出异常。
///
///
int GetInt32();
///
/// 获取当前Token的布尔值,如果是null则抛出异常。
///
///
bool GetBoolean();
///
/// 判断当前Token是否为null。
///
bool IsNull { get; }
///
/// 枚举当前Token作为数组时的所有元素,返回一个IEnumerable<IJsonTokens>。
///
///
IEnumerable EnumerateArray();
///
/// 将当前Token转换为指定类型的对象。
///
///
///
T ToObject();
///
/// 将当前Token转换为指定类型的对象。
///
///
///
object ToObject(Type type);
///
/// 将当前Token转换为字符串表示形式。
///
///
string ToString();
}
///
/// 使用Json进行数据交互的门户,允许外部使用第三方JSON库进行数据处理。
///
public interface IJsonProvider
{
///
/// JSON文本转为指定类型
///
///
///
///
T Deserialize(string jsonText);
///
/// JSON文本转为指定类型
///
///
///
///
object Deserialize(string jsonText, Type type);
///
/// 从对象转换为JSON文本
///
///
///
string Serialize(object obj);
///
/// 解析为Token
///
///
///
IJsonToken Parse(string json);
///
/// 尝试解析JSON文本为IJsonToken对象,如果成功则返回true,并通过out参数返回解析后的对象。
///
///
///
///
bool TryParse(string json, out IJsonToken jsonToken);
///
/// 创建对象
///
///
///
IJsonToken CreateObject(IDictionary? values = null);
///
/// 创建数组
///
///
///
IJsonToken CreateArray(IEnumerable