src/Converters/DateTimeConverter.cs

(开头部分) 2KB

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

using System;

namespace Rapidity.Json.Converters
{
    internal class DateTimeConverter : ITypeConverter, IConverterCreator
    {
        public Type Type { get; }

        public DateTimeConverter(Type type)  
        {
            Type = type;
        }

        public bool CanConvert(Type type)
        {
            return type == typeof(DateTime) || type == typeof(DateTimeOffset);
        }

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

        public object FromReader(JsonReader reader, JsonOption option)
        {
            switch (reader.TokenType)
            {
                case JsonTokenType.None:
                    reader.Read();
                    return FromReader(reader, option);
                case JsonTokenType.String:
                    if (Type == typeof(DateTime) && DateTime.TryParse(reader.Text, out DateTime value))
                        return value;
                    if (Type == typeof(DateTimeOffset) && DateTimeOffset.TryParse(reader.Text, out DateTimeOffset val))
                        return val;
                    throw new JsonException($"无法将JsonTokenType.String:{reader.Text}转换为{Type},反序列化{Type}失败", reader.Line, reader.Position);
                //case JsonTokenType.Number:
                default: throw new JsonException($"无效的JSON Token:{reader.TokenType},反序列化{Type}失败", reader.Line, reader.Position);
            }
        }

        public object FromToken(JsonToken token, JsonOption option)
        {
            switch (token.ValueType)
            {
                case JsonValueType.String:
                    var text = ((JsonString)token).Value;
                    if (Type == typeof(DateTime) && DateTime.TryParse(text, out DateTime value))
                        return value;
                    if (Type == typeof(DateTimeOffset) && DateTimeOffset.TryParse(text, out DateTimeOffset val))
                        return val;
                    throw new JsonException($"无法将JsonValueType.String:{text}转换为{Type},反序列化{Type}失败");
                default: throw new JsonException($"无效的JSON Token:{token.ValueType},反序列化{Type}失败");
            }
        }

        public void ToWriter(JsonWriter writer, object obj, JsonOption option)
        {
            if (obj is DateTime dateTime)
                writer.WriteDateTime(dateTime);
后面还有 5 行代码,解锁后查看完整代码

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

AI 解读

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

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