簡體   English   中英

在 C# 中從 Object 轉換 Json 時獲取屬性名稱

[英]Getting property name while converting Json from Object in C#

我有一個 class 如下所示:

public class PCBulkRequest 
{ 
    public List<PCRequest> pcRequest { get; set; } 
}

當我嘗試將此 class 轉換為 JSON 字符串時,我得到了包含屬性名稱的 JSON ,這是我不想要的。

string json = JsonConvert.SerializeObject(pcRequest, Formatting.Indented);

結果:

{
  "pcRequest": [
    {
      "name": "John",
      "surname": "Elton"
    },
    {
      "name": "John",
      "surname": "Elton"
    }
  ]
}

預期結果:

[
  {
    "name": "John",
    "surname": "Elton"
  },
  {
    "name": "John",
    "surname": "Elton"
  }
]

直接序列化列表即可:

string json = JsonConvert.SerializeObject(pcRequest.pcRequest, Formatting.Indented);

順便說一句,您的命名目前有點令人困惑-聽起來您有一個名為pcRequest的變量,其類型為PCBulkRequest ,並且您的pcRequest屬性聽起來應該是一個請求,而實際上它是一個列表。 我會有這樣的名字:

public class PCBulkRequest
{
    public List<PCRequest> Requests { get; set; }
}

...

var bulkRequest = GetBulkRequest(); // Wherever this comes from
string json = JsonConvert.SerializeObject(bulkRequest.Requests, Formatting.Indented);

我們看不到您是如何定義它的,但根據您得到的結果,您的代碼中的pcRequest似乎必須是PCBulkRequest class 的實例。

因此 Json.NET 將按照您的指示序列化整個 object。 如果您只想序列化列表,那么它非常簡單:您需要從 object 中提供列表作為要序列化的項目。

string json = JsonConvert.SerializeObject(pcRequest.pcRequest, Formatting.Indented);

Json.NET 庫只能序列化您告訴它的內容,它無法猜測您實際想要序列化的子部分!


注意,我建議您更清楚地命名您的變量,這樣您就不會重復使用 class 中的屬性名稱作為該 class 實例的變量名稱。 它可能會有點混亂。 並且屬性名稱pcRequest是單數的,所以聽起來它會包含一個請求,而實際上它是一個列表 - 這也會讓人感到困惑。 如果您花時間為變量賦予有意義、清晰的名稱,您的代碼將更易於維護和理解(對您和其他人而言)。

暫無
暫無

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

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