我有一个用例,其中所有日期/时间值必须使用以下格式保存在JSON文档中:
yyyy-MM-ddTHH:mm:ss.fffffff
换句话说,无论日期/时间值如何,所有日期/时间值的长度都是27个字符,例如:
System.DateTime.MinValue = "0001-01-01T00:00:00.0000000"
System.DateTime.MaxValue = "9999-12-31T23:59:59.9999999"
19-May-2018 10:35:12 am = "2018-05-19T10:35:12.0000000"
不幸的是,Json.Net决定以各种格式格式化日期/时间,具体取决于日期/时间值。我试图在日期/时间属性上使用JsonConverter属性,即:
[JsonConverter( typeof( datetime_iso8601_converter ) )]
public System.DateTime created_utc;
我的转换器类如下:
public class datetime_iso8601_converter : Newtonsoft.Json.Converters.IsoDateTimeConverter
{
public datetime_iso8601_converter()
{
// Set format that all DateTime values will use ...
base.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffffff";
}
}
如果我使用调试器运行测试,例如:
created_utc = System.DateTime.MinValue;
我可以看到执行以下行:
base.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffffff";
但是,写入的结果JSON日期/时间值为:
"0001-01-01T00:00:00"
第二次尝试:
我尝试了以下转换器......
public class datetime_iso8601_converter : Newtonsoft.Json.Converters.DateTimeConverterBase
{
// The format that all datetime values will use ...
private const String k_fmt_datetime_iso8601 = "yyyy-MM-ddTHH:mm:ss.fffffff";
// Write the given datetime value using the format above ...
public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer )
{
if ( value is System.DateTime )
{
String dt_str;
System.DateTime dt;
dt = ( System.DateTime ) value;
dt_str = dt.ToString( k_fmt_datetime_iso8601 );
writer.WriteRawValue( dt_str );
}
else
{
throw new ArgumentException( "value is not System.DateTime" );
}
}
// Return a datetime value ...
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer )
{
if ( reader.TokenType != Newtonsoft.Json.JsonToken.Date )
{
throw new Exception( "Invalid token. Expected Date" );
}
return reader.Value;
}
}
再次使用调试器,我可以看到 dt_str 设置为以下值:
"0001-01-01T00:00:00.0000000"
但实际写入的值是:
"0001-01-01T00:00:00"
我不明白为什么。
如何以所需格式保存所有日期/时间值?
提前致谢。
答案 0 :(得分:0)
上述问题出现在使用Azure Functions的环境中。 Azure函数1.0.13的当前版本似乎不支持绑定重定向,即:
[JsonConverter( typeof( datetime_iso8601_converter ) )]
然而,release 1.22.0 will support JsonSettings和绑定重定向(希望如此)。