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