如何配置Json Serializer在web api中为输入和输出参数分别设置日期转换器?

时间:2018-01-15 08:51:19

标签: c# json datetime asp.net-web-api jsonserializer

我正在开发web api,我有要求让Json序列化器只将日期输入参数转换为 UTC 格式。

现在我正在使用此代码进行转换:

 IsoDateTimeConverter converter = new IsoDateTimeConverter
        {
            DateTimeStyles = DateTimeStyles.AdjustToUniversal,
        };

 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(converter);

以上配置将在输入和输出日期参数上实现。

如何配置我的web api,有两个日期转换器,一个用于输入参数,另一个用于输出参数?

PS:

我想将日期输入参数转换为utc,但输出参数转换为ISO 8601

1 个答案:

答案 0 :(得分:1)

我想到的最简单的解决方案是创建继承自IsoDateTimeConverter并覆盖CanWrite属性的自定义DateTime转换器,以便它始终返回false。在这种情况下,转换器将仅用于deserializng输入,而不会用于序列化输出:

public class InputUniversalConverter : IsoDateTimeConverter
{
    public override bool CanWrite => false;

    public InputUniversalConverter()
    {
        DateTimeStyles = DateTimeStyles.AdjustToUniversal;
    }
}

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new InputUniversalConverter());