簡體   English   中英

以“dd-mm-yyyy”格式強制JObject到serialzie日期

[英]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”。 請幫我解決這個問題。

這有兩種方法:

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

在這里嘗試幾件事。

不知道這是否有效,但您可以嘗試在模型中的數據注釋中設置DisplayFormat屬性,並在那里指定日期格式。

基於您正在使用的JSON庫,您可以探索它是否具有某種日期格式轉換工具,或者您可以在使用它時以編程方式執行某些設置。

再次不確定這一點,但您可以將該字段指定為string ,然后在反序列化后,將其轉換為具有所需格式的datetime。

由於您使用的是Json.Net,請參閱其文檔及其中一個鏈接: 單擊此處

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM