src/Converters/EnumConverter.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Text;

namespace Rapidity.Json.Converters
{
    internal class EnumConverter : TypeConverterBase, IConverterCreator
    {
        public EnumConverter(Type type) : base(type)
        {
        }

        public bool CanConvert(Type type)
        {
            return type.IsEnum;
        }

        public ITypeConverter Create(Type type)
        {
            return new EnumConverter(type);
        }

        public override object FromReader(JsonReader reader, JsonOption option)
        {
            switch (reader.TokenType)
            {
                case JsonTokenType.None:
                    reader.Read();
                    return FromReader(reader,option);
                case JsonTokenType.Number:
                case JsonTokenType.String:
                    if (TryParse(reader.Text, out object value)) return value;
                    throw new JsonException($"无效的Enum:{Type},值:{reader.Text}", reader.Line, reader.Position);
                default:
                    throw new JsonException($"无效的JSON Token:{reader.TokenType},序列化对象:{Type}", reader.Line, reader.Position);
            }
        }

        private bool TryParse(string value, out object obj)
        {
            try
            {
                obj = Enum.Parse(Type, value, true);
                return Enum.IsDefined(Type, obj);
            }
            catch
            {
                obj = null;
                return false;
            }
        }

        public override object FromToken(JsonToken token, JsonOption option)
        {
            switch (token.ValueType)
            {
                case JsonValueType.Number:
                    var numberToken = (JsonNumber)token;
                    if (numberToken.TryGetInt(out int num)) return num;
                    throw new JsonException($"无效的{Type}值:{numberToken.ToString()},{nameof(EnumConverter)}反序列化{Type}失败");
后面还有 15 行代码,解锁后查看完整代码

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

AI 解读

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

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