部署时忽略自定义JsonConverter

时间:2016-08-16 17:25:23

标签: asp.net asp.net-mvc asp.net-web-api json.net

我创建了一个简单的自定义JsonConverter - 下面的代码 - 只是更改传递无效日期时生成的错误消息。

这用于ASP.Net MVC站点以及用于Ajax调用的ASP.Net Web API。

我通过ajax发布了DTO(下面的部分代码)。当我在我的本地环境中执行此操作时,一切都会正常运行;当日期无效时,我收到错误请求以及正确的错误消息

当我将其发布到生产服务器时,它完全被忽略,我收到了默认的ModelState错误列表。

我已经验证了我的web.config和Newtonsoft版本;它们在本地和服务器上都是相同的。

为什么生产时会忽略转换器?

转换器是:

public class CustomDateValidationConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (string.IsNullOrEmpty(reader.Value.ToString()))
            return null;

        DateTime d;
        DateTime.TryParse(reader.Value.ToString(), out d);
        if (d == null || d == DateTime.MinValue)
            throw new Exception(string.Format("{0} is invalid", reader.Path.AddSpacesBeforeUppercase(true)));

        return d;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, DateTime.Parse(value as string));
    }
}

我在我的DTO中使用它:

.....
    [JsonConverter(typeof(CustomDateValidationConverter))]
    [DateLessThanOrEqual("CreateDateTo", "Create Date From must be on or before Create Date To")]
    public DateTime? CreateDateFrom { get; set; }
.....

1 个答案:

答案 0 :(得分:0)

检查您的生产服务器日期格式,它可能与您的开发环境不同。所以它可能会接受您输入日期格式为有效