Json 如何从DataContract中排除类型信息?

Json 如何从DataContract中排除类型信息?,json,serialization,Json,Serialization,我想从序列化中排除_类型的键和值: {"__type":"Entity:#Runtime.DataBus","Children":[],"Fields":[{"Key":"field1","Value":"10"},{"Key":"fieldString1","Value":"field1 init"},{"Key":"fieldString2","Value":"field2 init"}],"Name":"Entity1"} 我正在使用System.Runtime.Serializatio

我想从序列化中排除_类型的键和值:

{"__type":"Entity:#Runtime.DataBus","Children":[],"Fields":[{"Key":"field1","Value":"10"},{"Key":"fieldString1","Value":"field1 init"},{"Key":"fieldString2","Value":"field2 init"}],"Name":"Entity1"}
我正在使用
System.Runtime.Serialization.Json.DataContractJsonSerializer

我不得不将这些类型标记为KnownTypes,似乎正是这一点将_类型引入了序列化

我不希望它出现在我的对象中,如何才能做到这一点


如果不在带有DataContract的类上使用KnownType属性,它就可以工作,但是如果在这个类中没有它,我会在这个类成员的类型上出现各种异常。

我可以肯定地说,没有办法做到这一点,除非在多态场景中不序列化类型

一种可能的解决方案是创建某种类型的不会调用多态性的包装器操作,并通过该操作而不是通过poly方法返回对象


JSON序列化程序确实有一个名为alwaysEmitTypeInformation的标志,但打开它可以始终发出\uuuu类型。现在有办法关闭它,主要是为了避免意外的用户错误。

在较新版本中,您可以使用以下代码

DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
settings.EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Never;