@Bodden

Как выбрать из двух разных Json строк одну?

Здравствуйте.
Подскажите пожалуйста, как осуществить проверку какой json получен.
Сервер ВК присылает нормальный ответ:

{
    "ts": "209",
    "updates": [{
            "event_id": "0237692ceafd3e",
            "group_id": 00000001,
            "object": {
                "client_info": {
                    "button_actions": ["text", "vkpay", "open_app", "location", "open_link", "callback", "intent_subscribe", "intent_unsubscribe"],
                    "carousel": true,
                    "inline_keyboard": true,
                    "keyboard": true,
                    "lang_id": 0
                },
                "message": {
                    "attachments": [],
                    "conversation_message_id": 106,
                    "date": 1709378417,
                    "from_id": 00000001,
                    "fwd_messages": [],
                    "id": 151,
                    "important": false,
                    "is_hidden": false,
                    "out": 0,
                    "peer_id": 00000001,
                    "random_id": 0,
                    "text": "Привет",
                    "version": 10000268
                }
            },
            "type": "message_new",
            "v": "5.199"
        }
    ]
}


И Json с ошибкой:

{
  "failed": 1,
  "ts": 30
}


Я пытаюсь определить какой именно Json получен, в этом классе я должен пропустить нормальный ответ Json:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace Brusketta.src.VKModels.Json
{
    internal class FailedJson
    {
        public int Response(string jsonString)
        {
            var response = 0;
            Filed? filed = JsonSerializer.Deserialize<Filed>(jsonString);
            
            if (filed?.failed != 0)
            {
                response = filed.failed;
            }            

            return response;
        }
    }
    public class Filed
    {
        public int failed { get; set; }
        public int ts { get; set; }
    }
}


Когда приходит Json ответ с ошибкой, все хорошо отрабатывает, но когда приходит нормальный ответ, получаю исключение.
65e30cf5c80c1626858406.jpeg

Можно конечно отловить исключение, но мне кажется это не правильно. В таком мощном языке должно же как то проверятся тип приходящих Json.

Помогите пожалуйста разобраться, нашел JsonTokenType но не уверен то ли это, да и примеров нет. Мне как начинающему тяжко без примеров.

Спасибо.
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
если ответная строка короткая, нет проблем распарсить ее самостоятельно, несколько строк кода..
обдумайте..

ps если строка короткая - видимо ошибка? или уже десериализация в другой класс.. а можно и банальный split по скобкам, кавычками и запятой.. и анализ содержимого - сколько элементов? и оценка значений, тех что интересуют..
.. а со временем может освоите и получение/распознавание, класса, который не знали ранее ;))
Ответ написан
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Нужно перевести оба json ответа в классы, затем объединить их в один класс.
Вот так объявить failed, с возможностью, что он может быть null:
public int? failed { get; set; }
После выполнения десериализации json, проверять failed на null:
if(filed.failed != null) {
// response with error
} else {
// all ok
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы