在WCF服务中重命名__type-field

时间:2012-02-20 15:49:15

标签: c# json wcf datacontractserializer

我正在尝试将GeoJSON映射到DataContracts,以便在工作中使用某些WCF服务。 GeoJSON有一个名为“type”的字段,DataContracts-serialization依赖于字段“ _ _type”来支持de / serializing到正确的子类型。我的DataContracts都以GeoJSON规范命名,我将DataContracts的命名空间设置为“”,所以基本上我已经设法实现了GeoJSON< ==> DataContracts如果我只能告诉(de)序列化器使用字段“type”而不是字段“__type”。

是否可以告诉WCF或DataContract序列化程序查看类型信息的字段?如何支持实际使用__type-field的JSON标准?

1 个答案:

答案 0 :(得分:1)

你做不到。 __type在DataContractJsonSerializer中的最基本级别进行了硬编码。

您可能拥有的一个选项是将其包装在另一个序列化程序,数据协定解析程序或数据协定代理项周围,以映射__type中的任何类型(在序列化上)并将类型中的任何内容传输到__type(在反序列化)。这是额外的手工工作,非常令人头疼。

您拥有的另一个选择是编写自己的序列化程序。如果您只是通过Reflector了解DataContractJsonSerializer,并使用您的编写器和读取器模仿它,并分析使用或实例化DataContractJsonSerializer的位置,那么这并不像您想象的那么难。

您拥有的第三个选项是完全可能是另一个序列化程序,例如JSON .NET

第四个选项是使用MicrosoftAjax.js,它确实理解__type,然后以某种方式将它与GeoJSON一起使用(我不知道这是否可能,但只是把它作为一个潜在的想法扔出去)< / p>