强制对象以 "dd-mm-yyyy" 格式序列化日期

Force JObject to serialzie date in "dd-mm-yyyy" format

public Guid AddJobs(JObject parametrs)
{
        dynamic jsonParameters = parametrs;
        JobViewModel job = jsonParameters.Job.ToObject<JobViewModel>();
}

以上是我的代码。我正在尝试使用上述方法反序列化该模型。问题是它一直给我异常,日期格式不正确,因为它不期望 "dd-mm-yyyy"。请帮我解决这个问题。

这里有几件事要尝试。

不知道这是否有效,但您可以尝试在模型的数据注释中设置 DisplayFormat 属性并在那里指定日期格式。

根据您正在使用的 JSON 库,您可以探索它是否具有某种日期格式转换工具或您可以在使用时以编程方式进行的某些设置。

同样不确定,但您可以将该字段指定为 string,然后在反序列化后,将其转换为所需格式的日期时间。

由于您使用的是 Json.Net,请参阅他们的文档和其中一个链接:Click here

希望这对您有所帮助。

这里有两种方法:

1.Set 格式直接放在序列化器上。它会在不正确的值上抛出异常。

var jsonSer = new JsonSerializer();
jsonSer.DateFormatString = "dd-MM-yyyy";
JobViewModel job = obj.ToObject<JobViewModel>(jsonSer);

2.Create 一个自定义转换器并毫无例外地处理不正确的值:

public class CustomDateConverter : Newtonsoft.Json.Converters.DateTimeConverterBase
{
    private static readonly string DateTimeFormat = "dd-MM-yyyy";

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        DateTime res; // default value of a date is 01/01/0001

        // if parsing is successful that value will be changed, otherwise you get the default value and not and exception
        DateTime.TryParseExact(reader.Value.ToString(), DateTimeFormat, null, DateTimeStyles.None, out res); 

        return res;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(((DateTime)value).ToString(DateTimeFormat));
    }
}

并将转换器添加到您的序列化程序中:

var jsonSer = new JsonSerializer();
jsonSer.Converters.Add(new CustomDateConverter());
JobViewModel job = obj.ToObject<JobViewModel>(jsonSer);