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