Saf*_*afa 4 .net c# json.net deserialization
public Guid AddJobs(JObject parametrs)
{
dynamic jsonParameters = parametrs;
JobViewModel job = jsonParameters.Job.ToObject<JobViewModel>();
}
Run Code Online (Sandbox Code Playgroud)
以上是我的代码。我正在尝试使用上述方法反序列化此模型。问题是它一直给我一个例外,即日期格式不正确,因为它不期望“dd-mm-yyyy”。请帮我解决这个问题。
这里有两种方法:
1.直接在序列化器上设置格式。它将在不正确的值上引发异常。
var jsonSer = new JsonSerializer();
jsonSer.DateFormatString = "dd-MM-yyyy";
JobViewModel job = obj.ToObject<JobViewModel>(jsonSer);
Run Code Online (Sandbox Code Playgroud)
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));
}
}
Run Code Online (Sandbox Code Playgroud)
并将转换器添加到您的序列化程序:
var jsonSer = new JsonSerializer();
jsonSer.Converters.Add(new CustomDateConverter());
JobViewModel job = obj.ToObject<JobViewModel>(jsonSer);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |