diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjParsedCoordinates.cs b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjParsedCoordinates.cs index 1f34351..c31b097 100644 --- a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjParsedCoordinates.cs +++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjParsedCoordinates.cs @@ -51,6 +51,15 @@ public static StjParsedCoordinates Parse(ref Utf8JsonReader reader, GeometryFact reader.AssertToken(JsonTokenType.StartArray); reader.ReadOrThrow(); + if (reader.TokenType == JsonTokenType.EndArray) + { + reader.ReadOrThrow(); + if (reader.TokenType == JsonTokenType.EndArray) + { + return new StjParsedCoordinates(factory.CreateMultiPolygon(new Polygon[] { factory.CreatePolygon() })); + } + } + if (reader.TokenType == JsonTokenType.Number) { return new StjParsedCoordinates(ParseCoordinateSequence(ref reader, factory)); diff --git a/test/NetTopologySuite.IO.GeoJSON4STJ.Test/Converters/GeometryConverterTest.cs b/test/NetTopologySuite.IO.GeoJSON4STJ.Test/Converters/GeometryConverterTest.cs index 8a1ddf4..9fce938 100644 --- a/test/NetTopologySuite.IO.GeoJSON4STJ.Test/Converters/GeometryConverterTest.cs +++ b/test/NetTopologySuite.IO.GeoJSON4STJ.Test/Converters/GeometryConverterTest.cs @@ -23,6 +23,18 @@ public void TestReadWithEmptyCoordinatesArray(string type) Assert.That(geom.IsEmpty); } + [TestCase] + public void TestMultiPolygonReadWithArrayOfEmptyCoordinatesArray() + { + string geoJson = @"{ ""type"" : ""MultiPolygon"", ""coordinates"": [ [] ] }"; + var options = DefaultOptions; + var geom = Deserialize(geoJson, options); + + Assert.That(geom != null); + Assert.That(new MultiPolygon(new Polygon[] { new Polygon(null) }) == geom); + Assert.That(geom.IsEmpty); + } + [GeoJsonIssueNumber(57)] [TestCase("{\"type\": \"Point\", \"coordinates\": [], \"bbox\": null}")] [TestCase("{\"type\": \"LineString\", \"coordinates\": [], \"bbox\": null}")]