Это может показаться дубликатом, но я пробовал другие ответы безрезультатно. Я использую Xamarin и PHP. Мой PHP-запрос работает, но он не возвращает правильно отформатированный PHP. Я использую PHP 5.6 и JSON проверен. Мой PHP это:
$stmt=$conn->prepare("SELECT id,user,water,poop FROM dailyMisc WHERE user = ? AND misc_day = ?");
$stmt->bind_param('is',$userId,$dateSelected);
$stmt->execute();
$stmt->bind_result($idR,$user_idR,$waterR,$poopR);
$stmt->store_result();
while($stmt->fetch())
{
$misc[] = array('Id'=>$idR,'UserId'=>$user_idR,'Water'=>$waterR,'Poop'=>$poopR);
echo json_encode($misc);
}
PHP возвращает:
[{ «Идентификатор»: 25, «UserId»: 24, «вода»: 0, «Полуют»: 1}]
Моя ошибка Xamarin:
Newtonsoft.Json.JsonSerializationException: Невозможно десериализовать
текущий массив JSON (например, [1,2,3]) в тип
BitesBoardMobile.businessObject.BusinessMisc, потому что тип
для десериализации требуется объект JSON (например, {«name»: «value»})
правильно.Чтобы исправить эту ошибку, измените JSON на объект JSON (например,
{«name»: «value»}) или измените десериализованный тип на массив или
тип, который реализует интерфейс коллекции (например, ICollection, IList)
как список, который можно десериализовать из массива JSON.
JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его
десериализовать из массива JSON.
Кажется, в сообщении об ошибке содержится вся необходимая информация: для типа требуется объект JSON (например, {«name»: «value»}). Вы пытаетесь передать JSON массив в функцию, которая ожидает объект JSON.
php возвращает [{«Id»: 25, «UserId»: 24, «Water»: 0, «Poop»: 1}]
Эти квадратные скобки указывают, что вы отправляете массив, а не объект. Объект будет выглядеть так (обратите внимание, без квадратных скобок):
{"Id":25,"UserId":24,"Water":0,"Poop":1}
К счастью, нужный вам объект также является первым и единственным членом массива, так что вы можете взять его (возможно, json_encode($misc[0])
) или актерский состав $misc
как объект, в первую очередь, снимая скобки с его объявления ($misc =
не $misc[] =
):
$misc = array('Id'=>$idR,'UserId'=>$user_idR,'Water'=>$waterR,'Poop'=>$poopR);
проблема в том, что ваш массив не был правильно отформатирован.
$misc = ['Id'=>$idR,'UserId'=>$user_idR,'Water'=>$waterR,'Poop'=>$poopR];
echo json_encode($misc);