Ответ сервера отличается случайным образом, что приводит к сбою Json.Parse - PullRequest
0 голосов
/ 13 ноября 2018

У меня действительно странная проблема, которая сводит меня с ума. Это началось с того, что я заметил, что мой Json.Parse иногда терпел неудачу. Похоже, это

const Info = JSON.parse(response);
this.onInfoUpdate(Info.InfoConfig[0]);

и два разных ответа, которые я получаю:

"{\"InfoConfig\":[{\"InfoId\":1,\"InfoName\":\"Derp\",\"Pid\":0,\"StartDate\":\"2018-10-31T00:00:00\",\"EndDate\":\"2018-11-10T00:00:00\",\"InclusiveFilters\":null,\"ExlusiveFilters\":null,\"Type\":0}],\"InfoIds\":["1"],\"Guid\":\"2#myman\"}"

Этот не может разобрать объект Json. я не могу понять, почему иногда решается удалить \, а также "" вокруг всего массива

{"InfoConfig":[{"InfoId":1,"InfoName":"Derp","Pid":0,"StartDate":"2018-10-31T00:00:00","EndDate":"2018-11-10T00:00:00","InclusiveFilters":null,"ExlusiveFilters":null,"Type":0}],"InfoIds":["1"],"Guid":"2#myman"}

Этот работает нормально, и JSON.parse преобразует его в объект Json. Но иногда я получаю ответ

Это часть, которая отправляет данные во внешний интерфейс

case HiveMessageType.PlayerInfo:
                var playerNotification = (PlayerInfoNotificationModel)message;
                var InfoIds = JsonConvert.SerializeObject(playerNotification.InfoIds);
                var serializedListWithInfo = JsonConvert.SerializeObject(playerNotification);
                SignalRClient.SendAsync("RegisterUserToMultipleGroups", playerNotification.Guid, InfoIds, serializedListWithInfo);
                break;

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я вижу, что вы используете случай переключения на HiveMessageType.PlayerInfo.Вы проверили, что вы не просто входите в неправильный случай переключателя, когда он не работает, и код в этом блоке переключателя просто не обновляется, чтобы работать?

Кажется странным, что вы получаете разные выходные данные, если выиспользуйте одни и те же входные данные и код каждый раз.

0 голосов
/ 13 ноября 2018

Первый ответ представляет собой обычную строку, а второй - стандартный объект javascript.

Оберните JSON.parse в блок try-catch, чтобы исключить синтаксический анализ ваших приложений при сбое.

Обтекание вашей переменной в JSON.stringify преобразует данные переменной в строку, если это не так.

var Info;
try {
  Info = JSON.parse(JSON.stringify(response));
} catch(e) {
  // Suppress the exception
  Info = response
}

// Use variable `Info` for further processing.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...