在 Nancy 2.0.0 中控制反序列化



如何指示 Nancy2.0.0-clinteastwoodDateTime进行自定义反序列化,例如从这个 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注册到您的容器中,例如在NancyBootStrapperConfigureApplicationContainer中,如下所示:

protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register<JsonSerializer, CustomJsonSerializer>();
// ... other container setup ...
}

我的问题是我错过了包括Nancy.Serialization.JsonNetNuGet包,这是这个特定项目工作所必需的。

问题是关于注册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());
}

最新更新