Skip to content

Commit 3a1c85a

Browse files
authored
Merge pull request #147 from zeus82/master
Geometry converter no longer writes. It was causing a reference loop
2 parents 0b8d4bb + eeb1ac9 commit 3a1c85a

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

src/GeoJSON.Net.Tests/Geometry/PolygonTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using GeoJSON.Net.Converters;
23
using GeoJSON.Net.Geometry;
34
using Newtonsoft.Json;
45
using NUnit.Framework;
@@ -28,6 +29,31 @@ public void Can_Serialize()
2829
JsonAssert.AreEqual(expectedJson, actualJson);
2930
}
3031

32+
[Test]
33+
public void Can_RoundTrip_IGeometryObject()
34+
{
35+
IGeometryObject polygon = new Polygon(new List<LineString>
36+
{
37+
new LineString(new List<IPosition>
38+
{
39+
new Position(52.379790828551016, 5.3173828125),
40+
new Position(52.36721467920585, 5.456085205078125),
41+
new Position(52.303440474272755, 5.386047363281249, 4.23),
42+
new Position(52.379790828551016, 5.3173828125),
43+
})
44+
});
45+
46+
var serializerSettings = new JsonSerializerSettings()
47+
{
48+
Converters = new List<JsonConverter>() { new GeometryConverter() }
49+
};
50+
51+
var json = JsonConvert.SerializeObject(polygon, serializerSettings);
52+
var result = JsonConvert.DeserializeObject<IGeometryObject>(json, serializerSettings);
53+
54+
Assert.AreEqual(result, polygon);
55+
}
56+
3157
[Test]
3258
public void Can_Deserialize_With_Exterior_And_Inner_Rings()
3359
{

src/GeoJSON.Net/Converters/GeometryConverter.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ namespace GeoJSON.Net.Converters
1515
/// </summary>
1616
public class GeometryConverter : JsonConverter
1717
{
18+
public override bool CanWrite => false;
19+
1820
/// <summary>
1921
/// Determines whether this instance can convert the specified object type.
2022
/// </summary>
@@ -64,7 +66,8 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
6466
/// <param name="serializer">The calling serializer.</param>
6567
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
6668
{
67-
serializer.Serialize(writer, value);
69+
// IGeometryObject can be written without a problem
70+
throw new NotImplementedException("Unnecessary because CanWrite is false. The type will skip the converter.");
6871
}
6972

7073
/// <summary>

0 commit comments

Comments
 (0)