public Guid AddJobs(JObject parametrs)
{
dynamic jsonParameters = parametrs;
JobViewModel job = jsonParameters.Job.ToObject<JobViewModel>();
}
以上是我的代码。我试图使用上述方法反序列化此模型。问题是它不断给我一个例外,即日期格式不正确,因为它没有预料到&#34; dd-mm-yyyy&#34;。请帮帮我。
答案 0 :(得分:4)
以下两种方法:
1.直接在序列化器上设置格式。它会在不正确的值上抛出异常。
var jsonSer = new JsonSerializer();
jsonSer.DateFormatString = "dd-MM-yyyy";
JobViewModel job = obj.ToObject<JobViewModel>(jsonSer);
2.创建自定义转换器并处理不正确的值而不例外:
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);
答案 1 :(得分:0)
在这里尝试几件事。
不知道这是否有效,但您可以尝试在模型中的数据注释中设置DisplayFormat
属性,并在那里指定日期格式。
根据您使用的JSON库,您可以探索它是否具有某种日期格式转换功能,或者您可以在使用它时以编程方式执行某些设置。
再次不确定这一点,但您可以将该字段指定为string
,然后在反序列化后,将其转换为具有所需格式的日期时间。
由于您使用的是Json.Net,请参阅他们的文档及其中一个链接:Click here
希望这有帮助。