Nancy 2.0.0 中的控制反序列化
Control deserialization in Nancy 2.0.0
如何指示 Nancy 2.0.0-clinteastwood 对 DateTime
进行自定义反序列化,例如 json
{
"someDate": "2018-09-18"
}
到 DateTime
属性 中,例如在这个 C# 的实例中 class
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 class 在 2.0.0 中似乎不可用。
在我看来,通过搜索似乎有一些 SimpleJson 功能可用于完成此操作,但我找不到任何示例,而且我找到的任何文档似乎都没有以 2.0.0 方式更新做事。
就像在以前的 1.x 版本中一样,您可以使用自定义 JsonSerializer
来指导南希进行一般 serialization/deserialization 调整:
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
。
我可以通过在 Global.Application_Start
中使用 Nancy 2.0.0 注册一个 PrimitiveConverter
:
protected void Application_Start(object sender, EventArgs e)
{
Nancy.Json.JsonConfiguration.Default.PrimitiveConverters.Add(new CustomJavaScriptPrimitiveConverter());
}
如何指示 Nancy 2.0.0-clinteastwood 对 DateTime
进行自定义反序列化,例如 json
{
"someDate": "2018-09-18"
}
到 DateTime
属性 中,例如在这个 C# 的实例中 class
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 class 在 2.0.0 中似乎不可用。
在我看来,通过搜索似乎有一些 SimpleJson 功能可用于完成此操作,但我找不到任何示例,而且我找到的任何文档似乎都没有以 2.0.0 方式更新做事。
就像在以前的 1.x 版本中一样,您可以使用自定义 JsonSerializer
来指导南希进行一般 serialization/deserialization 调整:
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
。
我可以通过在 Global.Application_Start
中使用 Nancy 2.0.0 注册一个 PrimitiveConverter
:
protected void Application_Start(object sender, EventArgs e)
{
Nancy.Json.JsonConfiguration.Default.PrimitiveConverters.Add(new CustomJavaScriptPrimitiveConverter());
}