Nancy 2.0.0中的控件反序列化

时间:2018-09-18 14:23:42

标签: c# nancy json-deserialization

我如何指示Nancy 2.0.0 -clinteastwood对DateTime进行自定义反序列化,例如从此json

{
    "someDate": "2018-09-18"
}

插入DateTime属性中,例如在C#类的实例中

public class SomeClass
{
    public DateTime SomeDate { get; set; }
}

在2.0.0之前的版本中,您可以apparently通过调用静态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的方式更新东西。

2 个答案:

答案 0 :(得分:3)

就像以前的1.x版本一样,您可以使用自定义category_filter_relations_items来指导Nancy关于常规的序列化/反序列化调整:

category_filter_relation_id

并使用您的容器注册此id,例如在category_filter_relations的{​​{1}}中,如下所示:

modification_id = 18340300

我的问题是我错过了为此特定项目提供JsonSerializer NuGet软件包的功能。

答案 1 :(得分:0)

问题是关于注册PrimitiveConverter,但答案似乎是在注册JsonSerializer

通过使用PrimitiveConverter在Nancy 2.0.0中进行注册,我能够注册Global.Application_Start

protected void Application_Start(object sender, EventArgs e)
{
    Nancy.Json.JsonConfiguration.Default.PrimitiveConverters.Add(new CustomJavaScriptPrimitiveConverter());
}