-
Notifications
You must be signed in to change notification settings - Fork 30
Open
Description
Hello! How would one accomplish this using Codecs?
type Geometry =
{ Geometry: NetTopologySuite.Geometries.Geometry }
static member ToJson(x: Geometry) =
let factory =
NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory(x.Geometry.SRID)
let options = JsonSerializerOptions()
options.Converters.Add(NetTopologySuite.IO.Converters.GeoJsonConverterFactory(factory))
jobj
[ "srid" .= x.Geometry.SRID
"geometry"
.= Fleece.SystemTextJson.Extensions.Encoding(JsonSerializer.SerializeToElement(x.Geometry, options)) ]
static member OfJson(json) =
match json with
| JObject o ->
monad {
let! (geoJson: JsonObject) = o .@ "geometry"
let! (srid: int) = o .@ "srid"
let factory =
NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory(srid)
let options = JsonSerializerOptions()
options.Converters.Add(NetTopologySuite.IO.Converters.GeoJsonConverterFactory(factory))
return
{ Geometry =
JsonSerializer.Deserialize<NetTopologySuite.Geometries.Geometry>(
geoJson |> Operators.toJsonValue,
options
) }
}
| x -> Decode.Fail.objExpected x
Metadata
Metadata
Assignees
Labels
No labels