首頁 >後端開發 >C++ >如何在 Json.Net 中序列化派生列表類別?

如何在 Json.Net 中序列化派生列表類別?

Barbara Streisand
Barbara Streisand原創
2025-01-07 12:56:40466瀏覽

How to Serialize Derived List Classes in Json.Net?

理解在Json.Net 中序列化派生列表類別的挑戰

使用從List 派生的類別時,例如PagedResult 類,您可能會遇到Json.Net 序列化問題。預設情況下,Json.Net 將實作 IEnumerable 的類別視為陣列。但是,使用 [JsonObject] 和 [JsonProperty] 屬性標記衍生類別只會序列化衍生類別的成員,不包含列表本身。

克服困境:兩種方法

要解決此問題,您有兩個選擇:

選項1:暴露清單作為公共屬性

您可以在衍生類別中建立公共屬性來公開清單。例如,在 PagedResult 中,您可以新增屬性 public List項目{得到;放; }。這允許派生類別成員和列表都被序列化。

選項 2:利用自訂 JsonConverter

或者,您可以編寫一個自訂 JsonConverter 來處理根據需要進行序列化。以下是 PagedResult 的範例轉換器:

class PagedResultConverter<T> : JsonConverter
{
    // Override methods for writing and reading JSON
    // For brevity, only the `WriteJson` method is shown here
    
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        PagedResult<T> result = (PagedResult<T>)value;
        // Create a JSON object to represent the PagedResult
        // Add both derived class members and list items to the object
        // Write the object to the writer
    }
}

在此轉換器中,我們可以完全控制序列化過程,確保衍生類別成員和清單都包含在 JSON 輸出中。

演示和結論

這是一個演示,說明了自訂轉換器action:

// Assume a `PagedResult<string>` class definition
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
string json = JsonConvert.SerializeObject(result, settings);

透過使用任一方法,您都可以有效地序列化衍生類別成員和列表,滿足您在Json.Net 中的序列化要求。

以上是如何在 Json.Net 中序列化派生列表類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn