c# - Nancy 2.0.0 中的控制反序列化
问题描述
我如何指示Nancy 2.0.0 -clinteastwoodDateTime
从这个 json进行自定义反序列化
{
"someDate": "2018-09-18"
}
进入一个DateTime
属性,例如在这个 C# 类的一个实例中
public class SomeClass
{
public DateTime SomeDate { get; set; }
}
?
在 2.0.0 之前的版本中,您显然JavaScriptPrimitiveConverter
可以通过调用静态来分配您的自定义JsonSettings
,例如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
's中ConfigureApplicationContainer
是这样的:
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
base.ConfigureApplicationContainer(container);
container.Register<JsonSerializer, CustomJsonSerializer>();
// ... other container setup ...
}
我的问题是我错过了包含Nancy.Serialization.JsonNet
NuGet 包,这是这个特定项目工作所必需的。
推荐阅读
- php - 如何在 yii2 中使用子模板中的树枝管理资产?
- angular - Angular:是否可以关闭离线支持并仅对 ServiceWorkers 使用 swUpdate 服务?
- python - pyenv 垫片有时不可执行
- python - Aiohttp 发出 400 错误请求。但请求工作正常
- java - 无法将 main 的 @Configuration 的 @Bean 自动装配到测试 @Component
- php - Docker 容器 Apache+MapServer 和 Apache+PHP+Mapscript
- sql - 将值合并到按项目 ID 分组的单行中
- java - 如何在 Java 中获取 Windows 的桌面位置
- vue.js - 修改代码后 Gridsome 丢失 $page
- android - 将收据发送到电子邮件 android stripe