2017-07-03 89 views
0

如何反序列化在C#PHP JSON到C#對象如何反序列化JSON

{ 「會計師」 這個JSON字符串:{ 「系統標識」: 「1」, 「FIRST_NAME」: 「測試」 , 「姓氏」: 「測試」, 「產品類型」: 「樣本」 }}

我試了一下,到目前爲止使用JsonConvert.DeserializeObject

var jsonObj = JsonConvert.DeserializeObject<AccountantData>(responseMessage);

這是我的模型

public class AccountantData 
{ 
    [JsonProperty("accountant")] 
    public List<UserData> Accountant { get; set; } 
} 
public class UserData 
{ 
    public UserData(int sysId, string firstName, string lastName, string productType) 
    { 
     SystemId = sysId; 
     FirstName = firstName; 
     LastName = lastName; 
     ProductType = productType; 
    } 

    [JsonProperty("sysid")] 
    public int SystemId { get; set; } 

    [JsonProperty("first_name")] 
    public string FirstName { get; set; } 

    [JsonProperty("last_name")] 
    public string LastName { get; set; } 

    [JsonProperty("product_type")] 
    public string ProductType { get; set; } 
} 

但這會導致一個錯誤

類型的異常 'Newtonsoft.Json.JsonSerializationException' 發生在Newtonsoft.Json.dll但在用戶代碼沒有處理

其他信息:不能反序列化當前JSON對象(例如{ 「名稱」: 「值」})成型 'System.Collections.Generic.List`1 [MyApp.UserData]',因爲類型要求JSON陣列(例如[1,2,3]),以正確地反序列化。

要修復此錯誤,請將JSON更改爲JSON數組(例如[1,2,3])或更改反序列化類型,以使其成爲正常的.NET類型(例如,不是像整數這樣的基本類型,不是像數組或List的集合類型),可以從JSON對象反序列化。 JsonObjectAttribute也可以添加到類型中,以強制它從JSON對象反序列化。

回答

0

你的JSON輸入字符串是不正確的。 AccountantData使用ListUserData的(陣列)。試試這個:

{ 
    "accountant":[ 
     { 
     "sysid":"1", 
     "first_name":"Test", 
     "last_name":"Test", 
     "product_type":"Sample" 
     } 
    ] 
} 

更新: 如果你總是會擁有UserData一個對象,那麼你可以改變你的AccountantData類爲:

public class AccountantData 
{ 
    [JsonProperty("accountant")] 
    UserData Accountant { get; set; } 
} 

此外,如果你永遠有單UserData對象,你有JSON數據的控制,那麼你可以更新您的JSON數據輸入到如下簡單的格式:

{ 
    "sysid":"1", 
    "first_name":"Test", 
    "last_name":"Test", 
    "product_type":"Sample" 
} 

,然後反序列化這樣的:

var jsonObj = JsonConvert.DeserializeObject<UserData>(responseMessage); 
+0

我使用json_encode得到rowdata後。我需要將其格式化爲數組,當我json_encode? –

+0

如果我正確理解你的問題,不要認爲它與json_encode有關。如果您的JSON數據總是隻有一個UserData對象,那麼您可以更新您的AccountantData類。我已經用解釋更新了我的答案。 –