Как сериализовать DateTimeOffset из JsonNet? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь сериализовать модель в формат Json.Это моя модель:

    public class UemSiteAvailabilityDetailsRec
    {
        public string UemAlias;
        public string IpAddress;
        public DateTimeOffset Date;
        public string PlannedOutage;
        public string Severity;
        public string SiteName;
        public string SiteNumber;
        public string SourceAgentIp;
        public string Message;
    }

Это мой код для сериализации экземпляра модели:

var rec = //GETTING REC FROM DATABASE
var val = JsonNet.Serialize(rec);

И после этого мой val выглядит так:

{
    "UemAlias": "***.***.**.**",
    "IpAddress": "***.***.**.**",
    "Date": {
        "DateTime": "01\/24\/2019 00:00:21",
        "UtcDateTime": "01\/24\/2019 06:00:21",
        "LocalDateTime": "01\/24\/2019 00:00:21",
        "Date": "01\/24\/2019 00:00:00",
        "Day": 24,
        "DayOfWeek": 4,
        "DayOfYear": 24,
        "Hour": 0,
        "Millisecond": 800,
        "Minute": 0,
        "Month": 1,
        "Offset": {
            "Ticks": -216000000000,
            "Days": 0,
            "Hours": -6,
            "Milliseconds": 0,
            "Minutes": 0,
            "Seconds": 0,
            "TotalDays": -0.25,
            "TotalHours": -6,
            "TotalMilliseconds": -21600000,
            "TotalMinutes": -360,
            "TotalSeconds": -21600
        },
        "Second": 21,
        "Ticks": 636838848218000000,
        "UtcTicks": 636839064218000000,
        "TimeOfDay": {
            "Ticks": 218000000,
            "Days": 0,
            "Hours": 0,
            "Milliseconds": 800,
            "Minutes": 0,
            "Seconds": 21,
            "TotalDays": 0.000252314814814815,
            "TotalHours": 0.00605555555555556,
            "TotalMilliseconds": 21800,
            "TotalMinutes": 0.363333333333333,
            "TotalSeconds": 21.8
        },
        "Year": 2019
    },
    "PlannedOutage": "No",
    "Severity": "Critical",
    "SiteName": "BA_ISSI",
    "SiteNumber": null,
    "SourceAgentIp": null,
    "Message": "SITE TRUNKING, DEVICE CRITICAL MALFUNCTION"
}

Как видите, мой объект даты выглядит так, как будто в нем больше материала, чем мне нужно.И позже, когда я пытаюсь десериализовать строку следующим образом:

var rec = JsonConvert.DeserializeObject<UemSiteAvailabilityDetailsModel>(val);

я получаю сообщение об ошибке ...

При анализе значения обнаружен неожиданный символ: {.Путь 'Дата', строка 1, позиция 64. |

Как я могу сделать функцию сериализации сделать DateTimeOffset сериализацию более краткой и не вызвать ошибок?

1 Ответ

0 голосов
/ 02 февраля 2019

У меня нет доступа к Newtonsoft (насколько я могу судить) в моем проекте .Net Core.

Не уверен, является ли это требованием реализации или нет, но Для * .Net Core доступен пакет Nuget для Newtonsoft.Json (в настоящее время v. 12.0.1).Поэтому, если вы можете переопределить свое решение, чтобы использовать его, вы можете решить свою проблему, установив его, а затем используя его так:

using System;
using Newtonsoft.Json;

namespace ConsoleApp
{
    public class Program
    {
        public class UemSiteAvailabilityDetailsRec
        {
            public string UemAlias;
            public string IpAddress;
            public DateTimeOffset Date = new DateTimeOffset(new DateTime(1980, 7, 7));
            public string PlannedOutage;
            public string Severity;
            public string SiteName;
            public string SiteNumber;
            public string SourceAgentIp;
            public string Message;
        }

        static void Main(string[] args)
        {
            var toSerialize = new UemSiteAvailabilityDetailsRec();
            string val = JsonConvert.SerializeObject(toSerialize);
            Console.WriteLine(val);
            Console.ReadKey();
        }

    }
}

Это приводит к следующему json:

{
    "UemAlias": "",
    "IpAddress": null,
    "Date": "1980-07-07T00:00:00-05:00",
    "PlannedOutage": null,
    "Severity": null,
    "SiteName": null,
    "SiteNumber": null,
    "SourceAgentIp": null,
    "Message": null
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...