diff --git a/src/Serializers/Nest.JsonNetSerializer/Converters/HandleNestTypesOnSourceJsonConverter.cs b/src/Serializers/Nest.JsonNetSerializer/Converters/HandleNestTypesOnSourceJsonConverter.cs index a82a887d436..2cdabd91b80 100644 --- a/src/Serializers/Nest.JsonNetSerializer/Converters/HandleNestTypesOnSourceJsonConverter.cs +++ b/src/Serializers/Nest.JsonNetSerializer/Converters/HandleNestTypesOnSourceJsonConverter.cs @@ -16,7 +16,8 @@ public class HandleNestTypesOnSourceJsonConverter : JsonConverter typeof(CompletionField), typeof(Attachment), typeof(ILazyDocument), - typeof(GeoCoordinate) + typeof(GeoCoordinate), + typeof(GeoLocation) }; private readonly IElasticsearchSerializer _builtInSerializer; diff --git a/src/Tests/Tests.Reproduce/GitHubIssue3981.cs b/src/Tests/Tests.Reproduce/GitHubIssue3981.cs new file mode 100644 index 00000000000..c811ad21f93 --- /dev/null +++ b/src/Tests/Tests.Reproduce/GitHubIssue3981.cs @@ -0,0 +1,31 @@ +using System.Text; +using Elastic.Xunit.XunitPlumbing; +using FluentAssertions; +using Nest; +using Tests.Core.Client; + +namespace Tests.Reproduce +{ + public class GitHubIssue3981 + { + // This test always passes because the JsonPropertyAttribute on + // the GeoLocation type are recognized by the JsonNetSerializer when used in tests, because the + // IL rewriting to internalize Json.NET in the client happens *after* tests are run. + [U] + public void JsonNetSerializerSerializesGeoLocation() + { + var document = new Document + { + Location = new GeoLocation(45, 45) + }; + + var indexResponse = TestClient.InMemoryWithJsonNetSerializer.IndexDocument(document); + Encoding.UTF8.GetString(indexResponse.ApiCall.RequestBodyInBytes).Should().Contain("\"lat\"").And.Contain("\"lon\""); + } + + private class Document + { + public GeoLocation Location { get; set; } + } + } +}