Преобразование JSON в объект

у меня есть метод, который отправляет POST Запрос к моему PHP API, и API отвечает возвращаемым значением JSON String.

Однако после использования JsonConvert.DeserializeObject() к результату JSON, я получаю этот формат

{[
{
"usr_name": "12-34567",
"usr_fullname": "LASTNAME, FIRSTNAME MIDDLENAME",
"usr_emailaddress": "[email protected]",
"photo_url": "http://mywebsite.com/fetch_photo.php?id=MTItNDA1MDY=",
"token": "64c420939814c62889ea143d17736841"}
]}

Однако я не могу Deserialize это к моему классу, который структурирован как ниже

public class MyObject
{
public string usr_name { get; set; }
public string usr_fullname { get; set; }
public string usr_emailaddress { get; set; }
public string photo_url { get; set; }
public string token { get; set; }
}

Я использую Newtonsoft JSON.Net для этой цели, это мой первый раз, когда я имею дело с JSON в C #, поэтому я совершенно не знаю, как и что делать. Я провел несколько исследований только для того, чтобы найти устаревшие учебники или вопросы в отличие от моего возвращенного значения JSON

поэтому ответ PHP выглядит так
введите описание изображения здесь

и после попытки десериализации это выглядит так
введите описание изображения здесь

0

Решение

Ваша строка JSON не является допустимой JSON — упаковка {} являются недействительными Вы должны проверить, как строка json генерируется / кодируется в вашем php API.

3

Другие решения

Если бы мне пришлось угадывать, я бы сказал, что вы сериализовали этот объект в PHP из запроса к базе данных, который обычно возвращает массив строк. Вот почему ваш JSON является объектом с массивом, который содержит объект.

Там есть дополнительный уровень косвенности, поэтому вам нужно удалить его, чтобы десериализовать. Попробуйте использовать array_pop в вашем PHP, чтобы убедиться, что вы сериализуете только один объект, или просто использовать fetch скорее, чем fetchAll эквивалент для вашего интерфейса базы данных в PHP, если вы ожидаете только одно значение. В противном случае переберите массив объектов после десериализации в C #.

2

Это может быть решающим для этого в PHP (если ваш пример json верен):

$obj = new MyClass();//get empty instance
$arr = json_decode(trim($json,'}{'),true);//get array from json, but fix it first
//because {[{'key':'value'}]} is not valid!
$arr = $arr[0];//get sub array with real data
//bind all data to your object
array_walk($arr,function($v,$k) use ($obj){ $obj->{$k}=$v; });

print $obj->usr_name;// output: 12-34567

Почему {[{'key':'value'}]} недействительный?
Член объекта ДОЛЖЕН иметь имя!

Так что это будет действительно JSON: {'content':[{'key':'value'}]},

ОБНОВЛЕНИЕ: Забудьте этот ответ! Вы хотите сделать это в C #, а не в PHP 🙂

1
По вопросам рекламы [email protected]