簡體   English   中英

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

[英]json to C# object how to deserialize JSON

如何在 C# 中反序列化這個 json 字符串

{ “會計師”:{ “sysid”:“1”,“first_name”:“Test”,“last_name”:“Test”,“product_type”:“樣本”} }

到目前為止我嘗試過的是使用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.dll 中發生了“Newtonsoft.Json.JsonSerializationException”類型的異常,但未在用戶代碼中處理

附加信息:無法將當前 JSON 對象(例如 {"name":"value"})反序列化為類型“System.Collections.Generic.List`1[MyApp.UserData]”,因為該類型需要 JSON 數組(例如 [1 ,2,3]) 以正確反序列化。

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

您的 JSON 輸入字符串不正確。 AccountantData使用UserData List (數組)。 嘗試這個:

{
   "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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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