Как разобрать PHP Doctrine Querybuilder DateTime из HTTPResponseMessage в C# DateTime?

Я пытаюсь передать результат SQL с моего веб-сайта, созданного на PHP, в мое приложение C#, которое я делаю с помощью Xamarin Forms. Я сделал это, создав конечную точку REST API в моем приложении PHP и, следовательно, вызвав URL-адрес через мое приложение C#. Это возвращает массив Json с моими результатами. Тем не менее, я не могу найти способ проанализировать объект datetime, который я получаю, на С# datetime, поскольку он имеет «.00000» позади даты и времени, от которого я не могу избавиться.

SQL

$query = $this->createQueryBuilder('c')
     ->select('partial c.{id, image, title,contentType, createdOn }', 'partial cd.{id, data}', 'partial u.{id, email} ', 'partial ud.{id, screenName, profileImage} ')
            ->join('c.data', 'cd')
            ->join('c.user', 'u')
            ->join('u.data', 'ud')
            ->andWhere('c.user !=:user')
            ->setParameters(
                array(
                    'user' => $this->janVanAllemanId
                )
            )
            ->orderBy('c.modifiedOn', 'DESC')
            ->setFirstResult($offset)
            ->setMaxResults($limit)
            ->getQuery();

    $results = $query->getArrayResult();

JSON-массив

        {
    "posts": [
        {
            "id": 3373,
            "contentType": 6,
            "createdOn": {
                "date": "2019-05-21 14:00:14.000000",
                "timezone_type": 3,
                "timezone": "Europe/Amsterdam"
            },
            ...

        },
        {
            "id": 3371,
            "contentType": 6,
            "createdOn": {
                "date": "2019-05-18 14:30:09.000000",
                "timezone_type": 3,
                "timezone": "Europe/Amsterdam"
            },
            ...

        }
    ]
}

Как видите, он возвращает массив с "Дата", "часовой пояс" и "тип_часового пояса". Я не могу использовать это, чтобы разобрать его на объект C# DateTime на всю жизнь.

Это то, что я пробовал:

PostRepository.cs

 public class PostRepository : Repository
    {
        public async Task<List<Post>> GetNotifications(int userId, int offset = 0, int limit = 16)
        {
            string[] queryParams = { "userId = " + userId, "offset = " + offset, "limit = " + limit };
            string uri =
RestService.GetApiUrl(UrlExtension.POST_NOTIFICATIONS, queryParams);

            List<Post> posts = new List<Post>();
            HttpResponseMessage response = null;
            response = await client.GetAsync(uri);

            if (response.IsSuccessStatusCode)
            {

                PostList postList = await response.Content.ReadAsAsync<PostList>();

                posts = postList.Posts;
            }

            return posts as List<Post>;
        }
}

PostList.cs

public class PostList
    {
        [JsonProperty("posts")]
        public List<Post> Posts { get; set; }
        public PostList()
        {
        }
    }

* Способ 1: Через свойство DateTime я попытался десериализовать результат.

Post.cs

...
public class Post
{
     [JsonProperty("createdOn")]
     public DateTime CreatedOnDateTime{get;set;}
}

Это явно не работает, потому что это недопустимый объект Datetime. Итак, я попробовал JObject и получил ключ «дата», который вы могли видеть выше, в моем массиве Json:

Post.cs

         ...


public class Post
            {
                 public DateTime CreatedOnDateTime {get;set;}
                 [JsonProperty("createdOn")]
                 public JObject CreatedOn{
                 set{  
                 CreatedOnDateTime= DateTime.ParseExact(value["date"].ToString(),
"M/d/yyyy hh:mm",CultureInfo.CreateSpecificCulture("nl-NL"));

                 }
            }

Он успешно преобразуется в JObject, но генерирует исключение, говорящее, что это недопустимая строка для преобразования в объект datetime! Я в основном думаю, что причина, по которой это не работает, заключается в том, что .00000 волшебным образом появляется позади моих дат?!

Кто-нибудь знает способ преобразовать мои результаты Json в C# DateTime? Я очень ценю вашу помощь!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать этот:
CreatedOnDateTime = DateTime.Parse(value["date"].ToString(), CultureInfo.CreateSpecificCulture("nl-NL"));

МОЙ БОГ! И это всего лишь небольшое изменение функций. Спасибо!

IT-Girl 21.05.2019 15:24

грааг гедан :)

Y.Y. 21.05.2019 15:27

Другие вопросы по теме