繁体   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