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

时间:2010-09-10 12:29:53

标签: json serialization

我想从序列化中排除__type键和值:

{"__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

我必须将Types标记为KnownTypes,看起来这就是将__type拉入序列化。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

JSON序列化程序确实有一个名为alwaysEmitTypeInformation的标志,但是你打开的东西总是发出__type。现在有办法将其关闭,主要是为了避免无意的用户错误。