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

标签 c# .net json.net deserialization

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

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

最佳答案

这里有两种方法:

1.直接在序列化器上设置格式。如果值不正确,它将引发异常。

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

2.创建自定义转换器并无一异常(exception)地处理不正确的值:

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

关于c# - 强制对象以 "dd-mm-yyyy"格式序列化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33971228/

相关文章:

c# - 通过最大化和恢复浏览器窗口调整大小的双滚动条

javascript - 每天更新网站变量

json - 如何从Azure blob中检索Json格式的blob数据?

c# - 使用 Nash/Unity 将 ADF 导出到 Tango sdcard - ADF 写入权限被拒绝

c# - 如何为具有身份列的 NHibernate 实体实现 GetHashCode?

c# - 我应该在 c# 中使用静态函数吗?

c# - 尝试使用 Autodesk.AutoCAD.DatabaseService 从 DWG 中读取数据 我需要引用什么 DLL?

c# - 带有 Newtonsoft 的 ASP.NET MVC 将对象从 Controller 传递到 View

asp.net - Newtonsoft.json 抛出错误 : Array was not a one-dimensional array

c# - 使用 filezilla 服务器在 C# 中使用 ftp 通过 ssl 发送文件