поле даты и времени в десериализации json - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть. json вот так:

[
    {
        "number":"00000001",
        "dt_doc":"2019-09-26T17:39.000Z",
        "address":"complete address"
    }
]

Но у меня проблема с полем dt_do c, это мой код десериализации ... У меня это в основном :

public override void CreateNewOutputRows()
    {
        String jsonFileContent = File.ReadAllText(Variables.JsonFilePath);
        JavaScriptSerializer js = new JavaScriptSerializer();
        List<Testata> testata = js.Deserialize<List<Testata>>(jsonFileContent);
        foreach(Testata test in testata)
        {
            Output0Buffer.AddRow();
            Output0Buffer.number= test.number;
            Output0Buffer.dtdoc = test.dt_doc;
            Output0Buffer.address= test.address;
        }
    }

и в моем классе Testata.cs я определил поле следующим образом:

public DateTime dt_doc { get; set; }

Но я получил исключение для этого поля, вероятно, связанное со стандартом 8601, Есть ли способ решить?

Это исключение:

Ошибка: System.FormatException: 2019-09-26T17: 39.000Z это недопустимое значение для DateTime. ---> System.FormatException: строка не распознана как допустимое значение DateTime.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

вы можете прочитать его в своем классе как строку, а затем:

DateTime.ParseExact(test.dt_doc,"yyyy-MM-ddTHH:mm.fffZ");
0 голосов
/ 27 февраля 2020

Ошибка в том, что вам не хватает секунд в дате

"dt_doc":"2019-09-26T17:39.000Z"

должно быть

"dt_doc":"2019-09-26T17:39.00.000Z"

Если это сделано преднамеренно, вы можете указать формат. Я пробовал это, используя Newtonsoft.Json

public class Testata
{
    [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-ddTHH:mm.fffZ")]
    public DateTime dt_doc { get; set; }
}

public class DateFormatConverter : IsoDateTimeConverter
{
    public DateFormatConverter(string format)
    {
        DateTimeFormat = format;
    }
}

List<Testata> testata = JsonConvert.DeserializeObject<List<Testata>>(jsonString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...