首頁 > 後端開發 > C++ > 如何在 C# 中將 JSON 屬性序列化/反序列化為值而不是物件?

如何在 C# 中將 JSON 屬性序列化/反序列化為值而不是物件?

Mary-Kate Olsen
發布: 2024-12-28 11:24:33
原創
543 人瀏覽過

How to Serialize/Deserialize JSON Properties as Values Instead of Objects in C#?

將JSON 屬性序列化/反序列化為值而不是物件:深入指南

在許多應用程式中,資料以JSON格式表示以實現高效的儲存和傳輸。但是,有時預設的 JSON 表示形式可能與我們所需的格式不一致。在處理自訂資料類型時尤其如此。在本文中,我們將探討程式設計師在序列化/反序列化具有自訂資料類型屬性的類別時所面臨的問題以及如何克服該問題。

問題陳述

考慮以下程式碼:

class Car
{
    public StringId Id { get; set; }
    public string Name { get; set; }
}

class StringId
{
    public string Value { get; set; }
}
登入後複製

當嘗試序列化Car 類別的物件時,我們可能會期望以下JSON表示:

{ "Id": "someId", "Name": "Ford" }
登入後複製

但是,JSON.NET中的預設行為會導致不同的表示:

{ "Id" : { "Value": "someId" }, "Name": "Ford" }
登入後複製

這是因為StringId 屬性被序列化為物件而不是簡單的物件

解決方案1:使用TypeConverter

解決此問題的一種方法是為StringId 類別建立一個TypeConverter。 JSON.NET 在序列化/反序列化物件時會自動偵測並使用此轉換器。以下是如何為 StringId 實作 TypeConverter:

[TypeConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : TypeConverter
{
    // Implementation of CanConvertFrom, CanConvertTo, ConvertFrom, and ConvertTo methods
}
登入後複製

此 TypeConverter 允許 JSON.NET 將 StringId 物件與字串相互轉換。

解決方案 2:使用自訂 JsonConverter

另一種方法是使用自訂 JsonConverter。這提供了對序列化/反序列化過程的更多控制。以下是如何為 StringId 實作自訂 JsonConverter:

[JsonConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : JsonConverter
{
    // Implementation of CanConvert, ReadJson, and WriteJson methods
}
登入後複製

此 JsonConverter 允許我們精確指定 StringId 物件應如何在 JSON 中表示。

其他注意事項

需要注意的是,類型轉換器僅在 .NET Core 受支援JSON.NET 10.0.1 及更高版本。對於舊版本,應使用自訂 JsonConverters。

以上是如何在 C# 中將 JSON 屬性序列化/反序列化為值而不是物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板