我正在尝试将GeoJSON映射到DataContracts,以便在工作中的某些WCF服务中使用。
GeoJSON有一个称为“类型”的字段,DataContracts序列化取决于字段“ __type”以支持将/反序列化为正确的子类型。我的DataContracts都是以GeoJSON规范命名的,并且我已经将DataContracts的命名空间设置为“”,因此,基本上,只要我能告诉(反)序列化器使用该字段,我就可以实现GeoJSON DataContracts “类型”而不是字段“ __type”。
是否可以告诉WCF或DataContract序列化程序要在哪个字段查看类型信息?人们将如何支持实际上使用__type字段的JSON标准?
最佳答案
你不能__type在DataContractJsonSerializer的最基本级别中进行了硬编码。
您可能具有的一种选择是将其包装在ANOTHER序列化程序,数据协定解析器或数据协定代理周围,以将__type中的任何内容映射到类型(在序列化时),并将类型中的任何内容转换到__type(在反序列化时)。这是额外的手工工作,这很令人头疼。
您还有另一个选择是编写自己的序列化器。如果您只是通过Reflector看一下DataContractJsonSerializer的方式,并与您的作者和读者一起模仿它,并分析在哪里使用或实例化了DataContractJsonSerializer,这并不像您想的那样困难。
您需要的第三个选择是完全只使用另一个序列化程序,例如JSON .NET。
第四个选择是使用确实理解__type的MicrosoftAjax.js,然后以某种方式将它与GeoJSON结合使用(我什至不知道这是否有可能,只是将其扔掉作为潜在的想法)