diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureCollectionConverter.cs b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureCollectionConverter.cs
index 514070a..828ec78 100644
--- a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureCollectionConverter.cs
+++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureCollectionConverter.cs
@@ -65,7 +65,7 @@ public override FeatureCollection Read(ref Utf8JsonReader reader, Type objectTyp
else
{
reader.ReadOrThrow();
- reader.Skip();
+ reader.SkipOrThrow();
reader.ReadOrThrow();
}
}
diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureConverter.cs b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureConverter.cs
index 5c2bcda..df1e947 100644
--- a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureConverter.cs
+++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjFeatureConverter.cs
@@ -162,7 +162,7 @@ public override IFeature Read(ref Utf8JsonReader reader, Type objectType, JsonSe
default:
// If property name is not one of the above: skip it entirely (foreign member)
- reader.Skip();
+ reader.SkipOrThrow();
// Advance
while (reader.Read())
{
diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjGeometryConverter.cs b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjGeometryConverter.cs
index e5d4c1a..eba3089 100644
--- a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjGeometryConverter.cs
+++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/StjGeometryConverter.cs
@@ -96,7 +96,7 @@ public override Geometry Read(ref Utf8JsonReader reader, Type typeToConvert, Jso
break;
default: // included "bbox" property
//read, but can't do anything with it (see NetTopologySuite.IO.GeoJSON => NetTopologySuite.IO.Converters.GeometryConverter.ParseGeometry)
- reader.Skip();
+ reader.SkipOrThrow();
reader.Read();
break;
}
@@ -248,7 +248,7 @@ public override void Write(Utf8JsonWriter writer, Geometry value, JsonSerializer
private void WritePolygon(Utf8JsonWriter writer, Polygon value, JsonSerializerOptions options)
{
-
+
writer.WriteStartArray();
WriteCoordinateSequence(writer, value.ExteriorRing.CoordinateSequence, options, orientation:_oriExterior);
for (int i = 0; i < value.NumInteriorRings; i++)
diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/Utility.cs b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/Utility.cs
index 52829e0..254915c 100644
--- a/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/Utility.cs
+++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Converters/Utility.cs
@@ -61,6 +61,15 @@ internal static void AssertToken(this ref Utf8JsonReader reader, JsonTokenType r
}
}
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal static void SkipOrThrow(this ref Utf8JsonReader reader)
+ {
+ if (!reader.TrySkip())
+ {
+ ThrowForUnexpectedPartialJson();
+ }
+ }
+
internal static object ObjectFromJsonNode(JsonNode node, JsonSerializerOptions serializerOptions)
{
switch (node)
@@ -93,6 +102,10 @@ internal static JsonNode ObjectToJsonNode(object obj, JsonSerializerOptions seri
private static void ThrowForUnexpectedEndOfStream()
=> throw new JsonException(Resources.EX_UnexpectedEndOfStream);
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ private static void ThrowForUnexpectedPartialJson()
+ => throw new JsonException(Resources.EX_UnexpectedPartialJson);
+
[MethodImpl(MethodImplOptions.NoInlining)]
private static void ThrowForUnexpectedToken(JsonTokenType requiredNextTokenType, ref Utf8JsonReader reader)
=> throw new JsonException(string.Format(Resources.EX_UnexpectedToken, requiredNextTokenType, reader.TokenType, CurrentTokenAsString(in reader)));
diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.Designer.cs b/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.Designer.cs
index 46224fc..36acb56 100644
--- a/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.Designer.cs
+++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.Designer.cs
@@ -131,5 +131,14 @@ internal static string EX_UnexpectedToken {
return ResourceManager.GetString("EX_UnexpectedToken", resourceCulture);
}
}
+
+ ///
+ /// Looks up a localized string similar to JsonConverter received partial JSON. This is likely the result of a bug in the System.Text.Json library..
+ ///
+ internal static string EX_UnexpectedPartialJson {
+ get {
+ return ResourceManager.GetString("EX_UnexpectedPartialJson", resourceCulture);
+ }
+ }
}
}
diff --git a/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.resx b/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.resx
index d0f48e0..ca2b5de 100644
--- a/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.resx
+++ b/src/NetTopologySuite.IO.GeoJSON4STJ/Properties/Resources.resx
@@ -141,4 +141,7 @@
Expected token is '{0}' but was '{1}' (Value '{2}').
-
\ No newline at end of file
+
+ JsonConverter received partial JSON. This is likely the result of a bug in the System.Text.Json library.
+
+