首頁 > 後端開發 > C++ > 如何在沒有默認的構造函數的情況下將JSON數據供應到C#類?

如何在沒有默認的構造函數的情況下將JSON數據供應到C#類?

Linda Hamilton
發布: 2025-01-29 16:32:10
原創
854 人瀏覽過

How to Deserialize JSON Data into a C# Class Without a Default Constructor?

JSON.NET:無需默認構造函數的反序列化

使用JSON.NET的默認構造函數可以無縫地將JSON數據反序列化到對像中。但是,如果您的類需要重載的構造函數,則默認構造函數可能會妨礙反序列化過程。當JSON數據與重載構造函數的參數一致但存在默認構造函數時,就會出現此問題。

解決方案:覆蓋默認行為

為了防止JSON.NET使用默認構造函數,有兩種方法:

1. 使用[JsonConstructor]特性:

JSON.NET允許您使用[JsonConstructor]特性指定首選的反序列化構造函數。通過用此特性註釋所需的構造函數,您可以強制JSON.NET使用它,即使定義了默認構造函數。請記住,構造函數參數應與JSON對象屬性一致(忽略大小寫)。

2. 創建自定義JsonConverter:

或者,如果無法修改類,您可以創建一個自定義JsonConverter來控制反序列化過程。可以自定義轉換器的ReadJson方法,以便使用非默認構造函數構造對象,並根據JSON數據填充任何其他屬性。

示例:

考慮以下帶有構造函數的類:

<code class="language-csharp">public class Result
{
    public Result() { }

    [JsonConstructor]
    public Result(int? code, string format, Dictionary<string, string> details = null)
    {
        Code = code ?? ERROR_CODE;
        Format = format;

        if (details == null)
            Details = new Dictionary<string, string>();
        else
            Details = details;
    }
}</code>
登入後複製

要使用[JsonConstructor]特性方法,請使用該特性裝飾首選的構造函數,如下所示:

<code class="language-csharp">[JsonConstructor]
public Result(int? code, string format, Dictionary<string, string> details = null)
{
    ...
}</code>
登入後複製

另一方面,對於自定義JsonConverter方法,您可以定義如下所示的轉換器:

<code class="language-csharp">class ResultConverter : JsonConverter
{
    // ...
}</code>
登入後複製

在此轉換器的ReadJson方法中,您可以使用非默認構造函數實例化Result對象,並根據JSON數據填充任何其他屬性。

通過利用這些技術,您可以覆蓋JSON.NET的默認行為,並啟用使用重載構造函數的反序列化,即使存在默認構造函數也是如此。

以上是如何在沒有默認的構造函數的情況下將JSON數據供應到C#類?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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