Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,14 @@ public class JsonNetSerializer : IElasticsearchSerializer
private readonly Dictionary<SerializationFormatting, JsonSerializer> _defaultSerializers;
private readonly JsonSerializer _defaultSerializer;

protected virtual void ModifyJsonSerializerSettings(JsonSerializerSettings settings) { }
protected virtual void ModifyJsonSerializerSettings(JsonSerializerSettings settings)
{
// Apply custom serialization settings from the connection serializer, if any; avoiding infinite loop with 'this' check.
var jsonNetSerializer = this.Settings?.Serializer as JsonNetSerializer;
if (jsonNetSerializer != null && jsonNetSerializer != this)
jsonNetSerializer.ModifyJsonSerializerSettings(settings);
}

protected virtual IList<Func<Type, JsonConverter>> ContractConverters => null;

public JsonNetSerializer(IConnectionSettingsValues settings) : this(settings, null) { }
Expand Down
34 changes: 34 additions & 0 deletions src/Tests/Document/Multiple/MultiGet/GetManyApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Elasticsearch.Net;
using FluentAssertions;
using Nest;
using Newtonsoft.Json;
using Tests.Framework;
using Tests.Framework.Integration;
using Tests.Framework.MockData;
Expand Down Expand Up @@ -52,5 +54,37 @@ public async Task UsesDefaultIndexAndInferredTypeAsync()
hit.Found.Should().BeTrue();
}
}

[I]
public void UseCustomSerializationSettings()
{
const string expectedDateString = "2015-02-06T23:45:05Z";
string jsonResponse = $@"{{ ""docs"": [ {{ ""_id"": ""1"", ""_source"": {{ ""dateString"": ""{expectedDateString}"" }}}}]}}";

var connection = new InMemoryConnection(Encoding.UTF8.GetBytes(jsonResponse));
var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var connectionSettings = new ConnectionSettings(connectionPool, connection, settings => new LocalJsonNetSerializer(settings)).DefaultIndex("default-index");
var client = new ElasticClient(connectionSettings);

var hit = client.GetMany<HasDateString>(new[] { "1" })?.FirstOrDefault();
hit.Should().NotBeNull();
hit.Source.Should().NotBeNull();
hit.Source.DateString.Should().Be(expectedDateString);
}

private sealed class HasDateString
{
public string DateString { get; set; }
}

private sealed class LocalJsonNetSerializer : JsonNetSerializer
{
public LocalJsonNetSerializer(IConnectionSettingsValues settings) : base(settings) { }

protected override void ModifyJsonSerializerSettings(JsonSerializerSettings settings)
{
settings.DateParseHandling = DateParseHandling.None;
}
}
}
}