使用声明为接口类型的成员序列化对象很容易 - 我们只需设置以下配置:
JsonSerializerSettings settings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
};
这将为每个对象创建一个“假属性”$类型,对于接口类型数据,它将是序列化之前它实际上的精确类型。这是有道理的,因为解串器需要知道如何重建它,并且没有其他可靠的方法来重建它,特别是如果你有的接口具有完全相同的属性但功能实现不同。
以下question通过检查自定义转换器中的属性值(以确定它是否为Son或Daughter)来解决此问题,但我们不能总是这样做。因此,我们坚持使用带有$ type的Newtonsoft解决方案。
还有一个question删除了$ type值的命名空间,这有助于(通过缩短),但我仍然不想让前端必须写$ type“属性“在它传递给API调用之前。
基本上,我希望前端不关心$ type但是在后端(甚至在API函数中),我想使用我的完整对象,好像它从未被序列化(然后反序列化) 。我应该如何设计我的界面和对象?我需要做什么其他的Newtonsoft设置?