Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serialization 使用Jackson解析器反序列化GeoJSON_Serialization_Jackson_Pojo_Geojson - Fatal编程技术网

Serialization 使用Jackson解析器反序列化GeoJSON

Serialization 使用Jackson解析器反序列化GeoJSON,serialization,jackson,pojo,geojson,Serialization,Jackson,Pojo,Geojson,我正在尝试将GeoJSON反序列化为相应的POJO。对于每种GeoJSON类型(点、线字符串、多边形等),我都有一个Java对象。我想让Jackson使用GeoJSON实体的type字段来使用相应的Java类。例如,假设我有以下GeoJSON实体: { "type": "Point", "coordinates": [100.0, 0.0] } { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } {

我正在尝试将GeoJSON反序列化为相应的POJO。对于每种GeoJSON类型(点、线字符串、多边形等),我都有一个Java对象。我想让Jackson使用GeoJSON实体的type字段来使用相应的Java类。例如,假设我有以下GeoJSON实体:

{ "type": "Point", "coordinates": [100.0, 0.0] }

{ "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] }

{ 
"type": "Polygon", "coordinates": [
    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
    [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
  ]
}
对于第一个对象,Jackson应该使用point类并相应地反序列化坐标字段。对于第二个对象,Jackson应使用LineString对象,对于第三个对象,Jackson应使用polygon对象

我知道您可以在Jackson中编写自定义反序列化程序,但我只见过针对单个对象字段的反序列化程序。在我的例子中,我认为我必须为整个GeoJSON实体编写一个反序列化程序,因为根据类型字段,整个表示形式会发生变化

也许有人能给我一个提示,在这种情况下该怎么办?也许有什么聪明的把戏我没读过


谢谢

为什么需要自定义处理程序?您确实需要使用
@JsonTypeInfo
注释(属性“type”;方法“As.NAME”)来获得自动多态类型处理;子类必须定义要与
@JsonTypeName
一起使用的名称。但除此之外,这似乎是可行的。
“coordinates”属性的结构似乎各不相同,所以您需要为单独的子类建模。

这里的一个例子是:坦克很多!这正是我想要的…你真的帮了我。