如何指示 Nancy2.0.0-clinteastwood对DateTime
进行自定义反序列化,例如从这个 json
{
"someDate": "2018-09-18"
}
到DateTime
属性中,例如在此 C# 类的实例中
public class SomeClass
{
public DateTime SomeDate { get; set; }
}
?
在 2.0.0 之前的版本中,您显然可以通过调用静态JsonSettings
来分配自定义JavaScriptPrimitiveConverter
,例如在这样的ApplicationStartup
中
Nancy.Json.JsonSettings.PrimitiveConverters.Add(new CustomJavaScriptPrimitiveConverter())
我本可以实现JavaScriptPrimitiveConverter
反序列化覆盖,例如
public override object Deserialize(object primitiveValue, Type type, JavaScriptSerializer serializer)
{
if (type == typeof(DateTime))
{
if (primitiveValue is string dateString
&& DateTime.TryParseExact(dateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var dateTime))
{
return dateTime;
}
}
return null;
}
但是,静态 JsonSettings 类在 2.0.0 中似乎不可用。
通过搜索,在我看来,有一些 SimpleJson 功能可用于完成此操作,但我找不到任何示例,我找到的任何文档似乎都没有使用 2.0.0 方式进行更新。
就像在以前的 1.x 版本中一样,您可以使用自定义JsonSerializer
来指导 Nancy 进行常规序列化/反序列化调整:
public sealed class CustomJsonSerializer : JsonSerializer
{
public CustomJsonSerializer()
{
DateFormatString = "yyyy-MM-dd";
// ... other formatting stuff ...
}
}
并将此JsonSerializer
注册到您的容器中,例如在NancyBootStrapper
的ConfigureApplicationContainer
中,如下所示:
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register<JsonSerializer, CustomJsonSerializer>();
// ... other container setup ...
}
我的问题是我错过了包括Nancy.Serialization.JsonNet
NuGet包,这是这个特定项目工作所必需的。
问题是关于注册PrimitiveConverter
但答案似乎是注册JsonSerializer
。
我能够在 Nancy 2.0.0Global.Application_Start
中执行此操作来注册PrimitiveConverter
:
protected void Application_Start(object sender, EventArgs e)
{
Nancy.Json.JsonConfiguration.Default.PrimitiveConverters.Add(new CustomJavaScriptPrimitiveConverter());
}