src/Converters/ValueConverter.cs

(开头部分) 10KB

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

using System;

namespace Rapidity.Json.Converters
{
    internal class ValueConverter : ITypeConverter, IConverterCreator
    {
        private TypeCode _typeCode;
        public Type Type { get; }
        public ValueConverter(Type type)
        {
            Type = type;
            _typeCode = Type.GetTypeCode(type);
        }

        public bool CanConvert(Type type)
        {
            //The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, 
            //Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single.
            return type.IsPrimitive
                     || type == typeof(decimal)
                     || type == typeof(Guid)
                     || type == typeof(DBNull);
        }

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

        public object FromReader(JsonReader reader, JsonOption option)
        {
            switch (reader.TokenType)
            {
                case JsonTokenType.None:
                    reader.Read();
                    return FromReader(reader, option);
                case JsonTokenType.True:
                    if (_typeCode == TypeCode.Boolean) return true;
                    break;
                case JsonTokenType.False:
                    if (_typeCode == TypeCode.Boolean) return false;
                    break;
                case JsonTokenType.String:
                    switch (_typeCode)
                    {
                        case TypeCode.Char:
                            if (char.TryParse(reader.Text, out char charVal)) return charVal;
                            break;
                        case TypeCode.Single:
                            if (reader.Text == JsonConstants.NaN) return float.NaN;
                            if (reader.Text == JsonConstants.NegativeInfinity) return float.NegativeInfinity;
                            if (reader.Text == JsonConstants.PositiveInfinity) return float.PositiveInfinity;
                            break;
                        case TypeCode.Double:
                            if (reader.Text == JsonConstants.NaN) return double.NaN;
                            if (reader.Text == JsonConstants.NegativeInfinity) return double.NegativeInfinity;
                            if (reader.Text == JsonConstants.PositiveInfinity) return double.PositiveInfinity;
                            break;
                        default:
                            if (Type == typeof(Guid) && Guid.TryParse(reader.Text, out Guid guidVal)) return guidVal;
后面还有 159 行代码,解锁后查看完整代码

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

AI 解读

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

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