diff --git a/src/Nest/ExposedInternals/NestSerializer.cs b/src/Nest/ExposedInternals/NestSerializer.cs
index f4545546d7c..d68c9ba7c3a 100644
--- a/src/Nest/ExposedInternals/NestSerializer.cs
+++ b/src/Nest/ExposedInternals/NestSerializer.cs
@@ -89,7 +89,7 @@ internal JsonSerializerSettings CreateSettings(JsonConverter piggyBackJsonConver
var piggyBackState = new JsonConverterPiggyBackState { ActualJsonConverter = piggyBackJsonConverter };
var settings = new JsonSerializerSettings()
{
- ContractResolver = new ElasticContractResolver(this._settings) { PiggyBackState = piggyBackState },
+ ContractResolver = new ElasticContractResolver(this._settings),
DefaultValueHandling = DefaultValueHandling.Include,
NullValueHandling = NullValueHandling.Ignore
};
@@ -97,6 +97,8 @@ internal JsonSerializerSettings CreateSettings(JsonConverter piggyBackJsonConver
if (_settings.ModifyJsonSerializerSettings != null)
_settings.ModifyJsonSerializerSettings(settings);
+ settings.ContractResolver = new SettingsContractResolver(settings.ContractResolver, this._settings) { PiggyBackState = piggyBackState };
+
return settings;
}
@@ -111,11 +113,11 @@ public string SerializeBulkDescriptor(BulkDescriptor bulkDescriptor)
{
var command = operation._Operation;
var index = operation._Index
- ?? inferrer.IndexName(bulkDescriptor._Index)
- ?? inferrer.IndexName(operation._ClrType);
+ ?? inferrer.IndexName(bulkDescriptor._Index)
+ ?? inferrer.IndexName(operation._ClrType);
var typeName = operation._Type
- ?? inferrer.TypeName(bulkDescriptor._Type)
- ?? inferrer.TypeName(operation._ClrType);
+ ?? inferrer.TypeName(bulkDescriptor._Type)
+ ?? inferrer.TypeName(operation._ClrType);
var id = operation.GetIdForObject(inferrer);
operation._Index = index;
diff --git a/src/Nest/Nest.csproj b/src/Nest/Nest.csproj
index 57432422c65..de13c08a242 100644
--- a/src/Nest/Nest.csproj
+++ b/src/Nest/Nest.csproj
@@ -822,6 +822,7 @@
+
@@ -874,4 +875,4 @@
-->
-
+
\ No newline at end of file
diff --git a/src/Nest/Resolvers/Converters/ConcreteTypeConverter.cs b/src/Nest/Resolvers/Converters/ConcreteTypeConverter.cs
index 9bf03f9cc42..7131bc6439e 100644
--- a/src/Nest/Resolvers/Converters/ConcreteTypeConverter.cs
+++ b/src/Nest/Resolvers/Converters/ConcreteTypeConverter.cs
@@ -78,7 +78,7 @@ public ConcreteTypeConverter(Func, Type> concreteTypeSelec
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
- var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
+ var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
if (elasticContractResolver != null && elasticContractResolver.PiggyBackState != null
&& elasticContractResolver.PiggyBackState.ActualJsonConverter != null)
{
@@ -161,7 +161,7 @@ internal static Type GetConcreteTypeUsingSelector(
JObject jObject, out object selection)
where T: class
{
- var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
+ var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
var baseType = realConcreteConverter._baseType;
var selector = realConcreteConverter._concreteTypeSelector;
diff --git a/src/Nest/Resolvers/Converters/DictionaryKeysAreNotPropertyNamesJsonConverter.cs b/src/Nest/Resolvers/Converters/DictionaryKeysAreNotPropertyNamesJsonConverter.cs
index 8e488b06754..fac420e0c76 100644
--- a/src/Nest/Resolvers/Converters/DictionaryKeysAreNotPropertyNamesJsonConverter.cs
+++ b/src/Nest/Resolvers/Converters/DictionaryKeysAreNotPropertyNamesJsonConverter.cs
@@ -30,7 +30,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
IDictionary dictionary = (IDictionary) value;
writer.WriteStartObject();
diff --git a/src/Nest/Resolvers/Converters/FieldNameFilterConverter.cs b/src/Nest/Resolvers/Converters/FieldNameFilterConverter.cs
index 49b8e60b3a0..6bf6208f07e 100644
--- a/src/Nest/Resolvers/Converters/FieldNameFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/FieldNameFilterConverter.cs
@@ -84,7 +84,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs b/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs
index fde9723f11d..1a4d1d006b1 100644
--- a/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs
+++ b/src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs
@@ -72,7 +72,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs
index 102d2c02f2d..a75f5288c24 100644
--- a/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/Filters/GeoBoundingFilterConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IGeoBoundingBoxFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Filters/GeoDistanceFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/GeoDistanceFilterConverter.cs
index d5d7b87d28c..30899497e43 100644
--- a/src/Nest/Resolvers/Converters/Filters/GeoDistanceFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/Filters/GeoDistanceFilterConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IGeoDistanceFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Filters/GeoDistanceRangeFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/GeoDistanceRangeFilterConverter.cs
index 0b8ea4463d0..ac4e9320741 100644
--- a/src/Nest/Resolvers/Converters/Filters/GeoDistanceRangeFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/Filters/GeoDistanceRangeFilterConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IGeoDistanceRangeFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Filters/PrefixFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/PrefixFilterConverter.cs
index f390b00f291..1cb019fa478 100644
--- a/src/Nest/Resolvers/Converters/Filters/PrefixFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/Filters/PrefixFilterConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IPrefixFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Filters/TermFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/TermFilterConverter.cs
index de2b8b7c951..42fe3b9f6a9 100644
--- a/src/Nest/Resolvers/Converters/Filters/TermFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/Filters/TermFilterConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as ITermFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Filters/TermsFilterConverter.cs b/src/Nest/Resolvers/Converters/Filters/TermsFilterConverter.cs
index 9720877fab8..44622354563 100644
--- a/src/Nest/Resolvers/Converters/Filters/TermsFilterConverter.cs
+++ b/src/Nest/Resolvers/Converters/Filters/TermsFilterConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as ITermsBaseFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/IndexNameMarkerConverter.cs b/src/Nest/Resolvers/Converters/IndexNameMarkerConverter.cs
index f67b21e0a79..7a5164fc88e 100644
--- a/src/Nest/Resolvers/Converters/IndexNameMarkerConverter.cs
+++ b/src/Nest/Resolvers/Converters/IndexNameMarkerConverter.cs
@@ -23,7 +23,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
return;
}
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract != null && contract.ConnectionSettings != null)
{
var indexName = contract.Infer.IndexName(marker);
diff --git a/src/Nest/Resolvers/Converters/IndexSettingsConverter.cs b/src/Nest/Resolvers/Converters/IndexSettingsConverter.cs
index 4aa56c43861..651cf3875cd 100644
--- a/src/Nest/Resolvers/Converters/IndexSettingsConverter.cs
+++ b/src/Nest/Resolvers/Converters/IndexSettingsConverter.cs
@@ -72,7 +72,7 @@ private static void WriteWarmers(JsonWriter writer, JsonSerializer serializer, I
private static void WriteMappings(JsonWriter writer, JsonSerializer serializer, IndexSettings indexSettings)
{
if (indexSettings.Mappings.Count <= 0) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null || contract.ConnectionSettings == null) return;
writer.WritePropertyName("mappings");
diff --git a/src/Nest/Resolvers/Converters/MultiGetHitConverter.cs b/src/Nest/Resolvers/Converters/MultiGetHitConverter.cs
index cf1b55e89c9..64ee570651d 100644
--- a/src/Nest/Resolvers/Converters/MultiGetHitConverter.cs
+++ b/src/Nest/Resolvers/Converters/MultiGetHitConverter.cs
@@ -41,7 +41,7 @@ private static void CreateMultiHit(MultiHitTuple tuple, JsonSerializer serial
var reader = tuple.Hit.CreateReader();
serializer.Populate(reader, hit);
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
var settings = contract.ConnectionSettings;
var f = new FieldSelection(settings);
var source = tuple.Hit["fields"];
@@ -59,7 +59,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
{
if (this._descriptor == null)
{
- var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
+ var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
if (elasticContractResolver == null)
return new MultiGetResponse { IsValid = false };
var piggyBackState = elasticContractResolver.PiggyBackState;
diff --git a/src/Nest/Resolvers/Converters/MultiSearchConverter.cs b/src/Nest/Resolvers/Converters/MultiSearchConverter.cs
index 3902ba4e494..e56ab977d86 100644
--- a/src/Nest/Resolvers/Converters/MultiSearchConverter.cs
+++ b/src/Nest/Resolvers/Converters/MultiSearchConverter.cs
@@ -67,7 +67,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
{
if (this._settings == null)
{
- var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
+ var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
if (elasticContractResolver == null)
return new MultiSearchResponse { IsValid = false };
var piggyBackState = elasticContractResolver.PiggyBackState;
diff --git a/src/Nest/Resolvers/Converters/Queries/FuzzyQueryJsonConverter.cs b/src/Nest/Resolvers/Converters/Queries/FuzzyQueryJsonConverter.cs
index b3d0b101f9f..d1b41251d70 100644
--- a/src/Nest/Resolvers/Converters/Queries/FuzzyQueryJsonConverter.cs
+++ b/src/Nest/Resolvers/Converters/Queries/FuzzyQueryJsonConverter.cs
@@ -98,7 +98,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs b/src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs
index a65c46c6126..00f2ac258c7 100644
--- a/src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs
+++ b/src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs
@@ -85,7 +85,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Queries/SpanTermQueryConverter.cs b/src/Nest/Resolvers/Converters/Queries/SpanTermQueryConverter.cs
index 4297b793e16..88441759b19 100644
--- a/src/Nest/Resolvers/Converters/Queries/SpanTermQueryConverter.cs
+++ b/src/Nest/Resolvers/Converters/Queries/SpanTermQueryConverter.cs
@@ -62,7 +62,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var sq = value as ISpanTermQuery;
if (sq == null) return;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;
diff --git a/src/Nest/Resolvers/Converters/Queries/TermsQueryJsonConverter.cs b/src/Nest/Resolvers/Converters/Queries/TermsQueryJsonConverter.cs
index b72d0ab7318..8599dd035db 100644
--- a/src/Nest/Resolvers/Converters/Queries/TermsQueryJsonConverter.cs
+++ b/src/Nest/Resolvers/Converters/Queries/TermsQueryJsonConverter.cs
@@ -24,7 +24,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
string field = null;
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract != null && contract.ConnectionSettings != null)
field = contract.Infer.PropertyPath(t.Field);
diff --git a/src/Nest/Resolvers/Converters/TypeNameMarkerConverter.cs b/src/Nest/Resolvers/Converters/TypeNameMarkerConverter.cs
index 6207e1e627c..35f5efbb39e 100644
--- a/src/Nest/Resolvers/Converters/TypeNameMarkerConverter.cs
+++ b/src/Nest/Resolvers/Converters/TypeNameMarkerConverter.cs
@@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as ElasticContractResolver;
+ var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract != null && contract.ConnectionSettings != null)
{
var typeName = contract.Infer.TypeName(marker);
diff --git a/src/Nest/Resolvers/ElasticContractResolver.cs b/src/Nest/Resolvers/ElasticContractResolver.cs
index a2d0f9ec692..61238b6a92c 100644
--- a/src/Nest/Resolvers/ElasticContractResolver.cs
+++ b/src/Nest/Resolvers/ElasticContractResolver.cs
@@ -23,19 +23,10 @@ public class ElasticContractResolver : DefaultContractResolver
///
public IConnectionSettingsValues ConnectionSettings { get; private set; }
- public ElasticInferrer Infer { get; private set; }
-
- ///
- /// Signals to custom converter that it can get serialization state from one of the converters
- /// Ugly but massive performance gain
- ///
- internal JsonConverterPiggyBackState PiggyBackState { get; set; }
-
public ElasticContractResolver(IConnectionSettingsValues connectionSettings)
: base(true)
{
this.ConnectionSettings = connectionSettings;
- this.Infer = new ElasticInferrer(this.ConnectionSettings);
}
protected override JsonContract CreateContract(Type objectType)
diff --git a/src/Nest/Resolvers/SettingsContractResolver.cs b/src/Nest/Resolvers/SettingsContractResolver.cs
new file mode 100644
index 00000000000..92d6c2b0cbb
--- /dev/null
+++ b/src/Nest/Resolvers/SettingsContractResolver.cs
@@ -0,0 +1,38 @@
+using Newtonsoft.Json.Serialization;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Nest.Resolvers
+{
+ class SettingsContractResolver : IContractResolver
+ {
+ ///
+ /// ConnectionSettings can be requested by JsonConverter's.
+ ///
+ public IConnectionSettingsValues ConnectionSettings { get; private set; }
+
+ public ElasticInferrer Infer { get; private set; }
+
+ private IContractResolver _wrapped;
+
+ ///
+ /// Signals to custom converter that it can get serialization state from one of the converters
+ /// Ugly but massive performance gain
+ ///
+ internal JsonConverterPiggyBackState PiggyBackState { get; set; }
+
+ public SettingsContractResolver(IContractResolver wrapped, IConnectionSettingsValues connectionSettings)
+ {
+ this.ConnectionSettings = connectionSettings;
+ this.Infer = new ElasticInferrer(this.ConnectionSettings);
+ this._wrapped = wrapped;
+ }
+
+ public JsonContract ResolveContract(Type type)
+ {
+ return this._wrapped.ResolveContract(type);
+ }
+ }
+}