代码之家  ›  专栏  ›  技术社区  ›  Ulf Åkerstedt

nancy2.0.0中的控件反序列化

  •  0
  • Ulf Åkerstedt  · 技术社区  · 7 年前

    Nancy 2.0.0 -clinteastwood对 DateTime

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

    变成一个 日期时间

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

    ?

    在2.0.0之前的版本中,您可以 apparently 指定自定义 JavaScriptPrimitiveConverter 通过调用静态 JsonSettings 例如在 ApplicationStartup

    Nancy.Json.JsonSettings.PrimitiveConverters.Add(new CustomJavaScriptPrimitiveConverter())
    

    我本可以实施 反序列化重写,例如

    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;
    }
    

    通过搜索,我觉得有一些SimpleJson功能可以用来实现这一点,但是我找不到任何示例,而且我找到的任何文档似乎都没有用2.0.0的方式进行更新。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Ulf Åkerstedt    7 年前

    就像在以前的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

        2
  •  0
  •   Nivin    5 年前

    PrimitiveConverter 但答案似乎是 JsonSerializer

    我注册了一个 原语转换器 这样做 Global.Application_Start 使用Nancy 2.0.0:

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