簡體   English   中英

c#如何為序列化指定自定義接口

[英]c# How to specify custom Interface for Serialization

我有一個類庫 myCore.dll 它包含一個類

public interface IMyClassA {
    public string A { get; set; }
    public string B { get; set; }
}

public class MyClassA: IMyClassA {
    public string A { get; set; }
    public string B { get; set; }
}

然后我得到了一個帶有自托管 http 服務的控制台項目。 它引用 myCode.dll 並通過 http 與 json 進行一些接口。 但如果我在這個項目中進行序列化,我想隱藏 MyClassA 的成員“B”。 我正在使用 Newtonsoft.Json。 但我不想在 myCode.dll 中引用 Newtonsoft 來設置 MyClassA.B 上的 [JsonIgnore] 屬性。

那么如何在從 IMyClassA 繼承的控制台項目中創建自定義界面?

您必須編寫一個自定義轉換器。

如果您使用 NewtonSoft,您將有兩種方法可以覆蓋:ReadJson(...) 和 WriteJson(...),一種用於序列化,另一種用於反序列化。 這樣您就可以編寫自己的代碼來負責序列化和反序列化。 擁有自己的代碼,您可以忽略 MyClassA 的成員“B”。

注冊轉換器,而不是在 DTO 上使用注釋

[JsonConverter(typeof(MyCustomConvreter))]
public interface IMyClassA {
    public string A { get; set; }
    public string B { get; set; }
}

這會導致對 Newtonsoft 的不良引用,您可以這樣做來注冊自定義轉換器:

var jsonSerializer = new JsonSerializer();
jsonSerializer.Converters.Add(new MyCustomConverter());

檢查 NewtonSoft 文檔以獲取自定義轉換器: https ://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm

暫無
暫無

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

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