我有一个方法可以向我的PHP API发送POST
请求,并且API以JSON字符串返回值进行响应。
然而,在使用JsonConvert.DeserializeObject()
到JSON结果后,我得到了这种格式
{[
{
"usr_name": "12-34567",
"usr_fullname": "LASTNAME, FIRSTNAME MIDDLENAME",
"usr_emailaddress": "myemail@mail.com",
"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; }
}
添加到我的类,其结构如下
require
我正在使用Newtonsoft JSON.Net这是为了这个目的,这是我第一次在C#中处理JSON所以我很无能为力,无论如何或做什么。我做过几项研究只是为了找到与我返回的JSON值不同的过时的教程或问题
答案 0 :(得分:3)
您的json字符串无效json - 包装{}
无效。您应该检查如何在php API中生成/编码json字符串。
答案 1 :(得分:2)
如果我不得不猜测,我会说你用数据库查询在PHP中序列化了这个对象,这通常会返回一个行数组。这就是为什么你的JSON是一个包含一个对象的数组的对象。
在那里有一个额外的间接级别,所以你需要删除它来反序列化。尝试在PHP中使用array_pop
以确保您只序列化单个对象,或者只使用PHP中的数据库接口的npm run jshint
而不是fetch
等效项,如果您只是期望一个单一的价值。否则,在C#中反序列化后迭代对象数组。
答案 2 :(得分:1)
这可能是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中这样做:)