簡體   English   中英

將JSON轉換為對象

[英]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值不同

所以PHP的響應看起來像這樣 在此處輸入圖片說明

嘗試反序列化后,它看起來像這樣 在此處輸入圖片說明

您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM