[英]Converting JSON to an Object
我有一種方法可以將POST
請求發送到我的PHP API,並且該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; }
}
我為此目的使用Newtonsoft JSON.Net,這是我第一次在C#中處理JSON,因此我一無所知,無所不能。 我做了一些研究,只是為了找到過時的教程或問題,這與我返回的JSON值不同
您的json字符串無效json-包裝{}
無效。 您應該檢查php API中如何生成/編碼json字符串。
如果我不得不猜測,我會說您是通過數據庫查詢在PHP中序列化了此對象,該查詢通常返回一個行數組。 這就是為什么您的JSON是帶有包含對象的數組的對象的原因。
那里有一個額外的間接級別,因此您需要刪除它以反序列化。 嘗試在PHP中使用array_pop
來確保僅序列化單個對象,或者如果只期望單個值,則對PHP中的數據庫接口僅使用fetch
而不是fetchAll
等效項。 否則,請在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來做:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.