src/Converters/LoopReferenceChecker.cs

(完整代码) 1KB

using System;
using System.Collections.Generic;

namespace Rapidity.Json.Converters
{
    public class LoopReferenceChecker
    {
        private readonly Stack<object> stack = new Stack<object>();     

        public virtual void PushRootObject(object obj)
        {
            if (CanPush(obj)) stack.Push(obj); 
        }

        public virtual bool Exsits(object obj)
        {
            if (!CanPush(obj)) return false;
            if (stack.Contains(obj)) return true;
            stack.Push(obj);
            return false;
        }

        public virtual void PopObject()
        {
            stack.Pop();
        }

        protected virtual bool CanPush(object obj)
        {
            if (obj == null || obj.GetType().IsPrimitive
              || obj is string || obj is decimal || obj is DateTime || obj is DateTimeOffset
              || obj is Guid || obj is JsonString || obj is JsonNumber || obj is JsonBoolean
              || obj is JsonNull || obj is DBNull)
                return false;
            return true;
        }
    }

    /// <summary>
    /// 对象循环引用处理方式
    /// </summary>
    public enum LoopReferenceProcess
    {
        Null,   //输出null值
        Ignore, //不输出
        Error   //抛异常
    }
}

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。