Преобразуйте класс модели в строку JSON путем преобразования формата даты в. Net core c# - PullRequest
2 голосов
/ 03 августа 2020

Я пишу веб-api в ядре C#. net. Необходимо преобразовать мой класс модели в json строку.

Мой класс как

public class InputModel
{
public string Id{get; set;}
public DateTime? ArrivalDate{get; set;}
public string origin{get; set;}
}

inputModel.origin = string.Empty; В настоящее время я конвертирую как

string Result = System.Text.Json.JsonSerializer.Serialize(inputModel, new JsonSerializerOptions { IgnoreNullValues = true} );

Мой текущий результат:

Result =  {
     "Id":"54"
     "ArrivalDate": "2020-07-26T00:00:00+00:00"
 }

Мой желаемый результат:

Result =  {
         "Id":"54"
         "ArrivalDate": "2020-07-26 00:00" --> "yyyy-MM-dd hh:mm"
     }

Я знаю, что мой текущий JsonSerializer ничего не делает для преобразования формата даты любой ввод приветствуется

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Этого можно достичь, просто выполнив сериализацию с помощью библиотеки Newtonsoft.Json. В этой библиотеке есть метод сериализации с перегрузкой, в котором можно упомянуть формат DateTime. Его приведено ниже:

string Result = JsonConvert.SerializeObject(inputModel, new IsoDateTimeConverter() { DateTimeFormat= "yyyy-MM-dd HH:mm" });

Данные будут содержаться с ArrivalDate в требуемом формате.

0 голосов
/ 03 августа 2020

Я достиг желаемого типа формата даты в строке json с помощью

public class CustomDateTimeConverter : JsonConverter<DateTime>
    {
        public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            Debug.Assert(typeToConvert == typeof(DateTime));
            return DateTime.Parse(reader.GetString());
        }

        public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
        {
            writer.WriteStringValue(value.ToString("dd'-'MM'-'yyyy HH':'mm"));
        }
    }

Вызов нашего класса конвертера на уровне кода, как показано ниже

JsonSerializerOptions options = new JsonSerializerOptions();
                    options.Converters.Add(new CustomDateTimeConverter());
                    options.IgnoreNullValues = true;
                    string Result = System.Text.Json.JsonSerializer.Serialize(inputModel, options );

С этим я мог преобразовать формат даты по умолчанию ....

...