у меня есть метод, который отправляет 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
Ваша строка JSON не является допустимой JSON — упаковка {}
являются недействительными Вы должны проверить, как строка json генерируется / кодируется в вашем php API.
Если бы мне пришлось угадывать, я бы сказал, что вы сериализовали этот объект в PHP из запроса к базе данных, который обычно возвращает массив строк. Вот почему ваш JSON является объектом с массивом, который содержит объект.
Там есть дополнительный уровень косвенности, поэтому вам нужно удалить его, чтобы десериализовать. Попробуйте использовать array_pop
в вашем PHP, чтобы убедиться, что вы сериализуете только один объект, или просто использовать fetch
скорее, чем fetchAll
эквивалент для вашего интерфейса базы данных в PHP, если вы ожидаете только одно значение. В противном случае переберите массив объектов после десериализации в C #.
Это может быть решающим для этого в 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 🙂