using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Serein.Library.Api;
using Serein.Library.Utils;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using static Serein.Library.Api.IJsonToken;
namespace Serein.Extend.NewtonsoftJson
{
///
/// 基于Newtonsoft.Json的IJsonToken实现
///
public sealed class NewtonsoftJsonObjectToken : IJsonToken, IDictionary
{
public TokenType Type => TokenType.Object;
private readonly JObject _object;
public NewtonsoftJsonObjectToken(JObject obj) => _object = obj;
public bool IsNull => false;
public bool IsObject => true;
public bool IsArray => false;
public string GetString() => _object.ToString();
public int GetInt32() => throw new InvalidOperationException("不是值类型");
public bool GetBoolean() => throw new InvalidOperationException("不是值类型");
public IJsonToken this[object key] => key is string name ? this[name] : throw new InvalidOperationException("不是数组类型");
public IJsonToken this[string key]
{
get => _object.TryGetValue(key, out var value) ? NewtonsoftJsonTokenFactory.FromJToken(value) : throw new KeyNotFoundException(key);
set => _object[key] = JToken.FromObject(value.ToObject