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 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
