diff --git a/src/Elasticsearch.Net/Serialization/IElasticsearchSerializer.cs b/src/Elasticsearch.Net/Serialization/IElasticsearchSerializer.cs
index 0321ca8377d..bdc76fe5c77 100644
--- a/src/Elasticsearch.Net/Serialization/IElasticsearchSerializer.cs
+++ b/src/Elasticsearch.Net/Serialization/IElasticsearchSerializer.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using Elasticsearch.Net.Extensions;
namespace Elasticsearch.Net.Serialization
{
@@ -25,6 +26,10 @@ public static byte[] SerializeToBytes(this IElasticsearchSerializer serializer,
return ms.ToArray();
}
}
+ public static string SerializeToString(this IElasticsearchSerializer serializer, object data, SerializationFormatting formatting = SerializationFormatting.Indented)
+ {
+ return serializer.SerializeToBytes(data, formatting).Utf8String();
+ }
}
diff --git a/src/Nest/Aggregations/Aggregation.cs b/src/Nest/Aggregations/Aggregation.cs
index 7ab65ca1cd1..dbe9a16d507 100644
--- a/src/Nest/Aggregations/Aggregation.cs
+++ b/src/Nest/Aggregations/Aggregation.cs
@@ -6,6 +6,7 @@ namespace Nest
///
/// Describes an aggregation at request time when its being build
///
+ [ExactContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IAggregation
{
}
diff --git a/src/Nest/Aggregations/AggregationContainer.cs b/src/Nest/Aggregations/AggregationContainer.cs
index 68bdb86bc12..96619eaa225 100644
--- a/src/Nest/Aggregations/AggregationContainer.cs
+++ b/src/Nest/Aggregations/AggregationContainer.cs
@@ -261,7 +261,7 @@ public static implicit operator AggregationContainer(AggregationBase aggregator)
}
}
- public class AggregationContainerDescriptor : IAggregationContainer
+ public class AggregationContainerDescriptor : DescriptorBase, IAggregationContainer>, IAggregationContainer
where T : class
{
AggregationDictionary IAggregationContainer.Aggregations { get; set; }
diff --git a/src/Nest/Aggregations/AggregationJsonConverter.cs b/src/Nest/Aggregations/AggregationJsonConverter.cs
index 6ddda2439d2..e67502128f6 100644
--- a/src/Nest/Aggregations/AggregationJsonConverter.cs
+++ b/src/Nest/Aggregations/AggregationJsonConverter.cs
@@ -8,6 +8,12 @@
namespace Nest
{
+ internal class AggregationJsonConverter : ReadAsTypeJsonConverter
+ where TReadAs : class
+ {
+
+ }
+
internal class AggregationJsonConverter : JsonConverter
{
private static Regex _numeric = new Regex(@"^[\d.]+(\.[\d.]+)?$");
diff --git a/src/Nest/Aggregations/Bucket/BucketAggregationBase.cs b/src/Nest/Aggregations/Bucket/BucketAggregationBase.cs
index 5199663295d..c72f59705c0 100644
--- a/src/Nest/Aggregations/Bucket/BucketAggregationBase.cs
+++ b/src/Nest/Aggregations/Bucket/BucketAggregationBase.cs
@@ -19,7 +19,7 @@ protected BucketAggregationBase(string name) : base(name) { }
}
public abstract class BucketAggregationDescriptorBase
- : IBucketAggregation
+ : IBucketAggregation, IDescriptor
where TBucketAggregation : BucketAggregationDescriptorBase
, TBucketAggregationInterface, IBucketAggregation
where T : class
diff --git a/src/Nest/Aggregations/Bucket/Children/ChildrenAggregation.cs b/src/Nest/Aggregations/Bucket/Children/ChildrenAggregation.cs
index 82309996d58..a151d11e675 100644
--- a/src/Nest/Aggregations/Bucket/Children/ChildrenAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Children/ChildrenAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IChildrenAggregation : IBucketAggregation
{
[JsonProperty("type")]
diff --git a/src/Nest/Aggregations/Bucket/DateHistogram/DateHistogramAggregation.cs b/src/Nest/Aggregations/Bucket/DateHistogram/DateHistogramAggregation.cs
index b843e89de61..4c7500943d6 100644
--- a/src/Nest/Aggregations/Bucket/DateHistogram/DateHistogramAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/DateHistogram/DateHistogramAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IDateHistogramAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/DateRange/DateRangeAggregation.cs b/src/Nest/Aggregations/Bucket/DateRange/DateRangeAggregation.cs
index b419be7ff97..ec536eddc38 100644
--- a/src/Nest/Aggregations/Bucket/DateRange/DateRangeAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/DateRange/DateRangeAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IDateRangeAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/DateRange/DateRangeExpression.cs b/src/Nest/Aggregations/Bucket/DateRange/DateRangeExpression.cs
index 2e8241df60e..892f5b9e035 100644
--- a/src/Nest/Aggregations/Bucket/DateRange/DateRangeExpression.cs
+++ b/src/Nest/Aggregations/Bucket/DateRange/DateRangeExpression.cs
@@ -4,7 +4,7 @@
namespace Nest
{
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IDateRangeExpression : INestSerializable
+ public interface IDateRangeExpression
{
[JsonProperty(PropertyName = "from")]
DateMath From { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/Filter/FilterAggregation.cs b/src/Nest/Aggregations/Bucket/Filter/FilterAggregation.cs
index e33b1a64908..ab94210a49e 100644
--- a/src/Nest/Aggregations/Bucket/Filter/FilterAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Filter/FilterAggregation.cs
@@ -4,7 +4,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(FilterAggregationJsonConverter))]
+ [ContractJsonConverter(typeof(FilterAggregationJsonConverter))]
public interface IFilterAggregation : IBucketAggregation
{
QueryContainer Filter { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/Filters/FiltersAggregation.cs b/src/Nest/Aggregations/Bucket/Filters/FiltersAggregation.cs
index 9f567c720ae..5c03ba1d5b2 100644
--- a/src/Nest/Aggregations/Bucket/Filters/FiltersAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Filters/FiltersAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IFiltersAggregation : IBucketAggregation
{
[JsonProperty("filters")]
@@ -31,8 +31,8 @@ public class FiltersAggregationDescriptor
{
Union> IFiltersAggregation.Filters { get; set; }
- public FiltersAggregationDescriptor NamedFilters(Func, NamedFiltersContainerBase> selector) =>
- Assign(a => a.Filters = selector?.Invoke(new NamedFiltersContainerDescriptor()));
+ public FiltersAggregationDescriptor NamedFilters(Func, IPromise> selector) =>
+ Assign(a => a.Filters = new Union>(selector?.Invoke(new NamedFiltersContainerDescriptor())?.Value));
public FiltersAggregationDescriptor AnonymousFilters(params Func, IQueryContainer>[] selectors) =>
Assign(a => a.Filters = selectors.Select(s=>s?.Invoke(new QueryContainerDescriptor())).ToListOrNullIfEmpty());
diff --git a/src/Nest/Aggregations/Bucket/Filters/NamedFiltersContainer.cs b/src/Nest/Aggregations/Bucket/Filters/NamedFiltersContainer.cs
new file mode 100644
index 00000000000..b7453e5d831
--- /dev/null
+++ b/src/Nest/Aggregations/Bucket/Filters/NamedFiltersContainer.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Newtonsoft.Json;
+
+namespace Nest
+{
+ [JsonConverter(typeof(VerbatimDictionaryKeysJsonConverter))]
+ public interface INamedFiltersContainer : IIsADictionary
+ {
+ }
+
+ public class NamedFiltersContainer: IsADictionary, INamedFiltersContainer
+ {
+ public NamedFiltersContainer() : base() { }
+ public NamedFiltersContainer(IDictionary container) : base(container) { }
+ public NamedFiltersContainer(Dictionary container)
+ : base(container.Select(kv => kv).ToDictionary(kv => kv.Key, kv => (IQueryContainer)kv.Value))
+ { }
+
+ public void Add(string name, IQueryContainer filter) => BackingDictionary.Add(name, filter);
+ public void Add(string name, QueryContainer filter) => BackingDictionary.Add(name, filter);
+ }
+
+ public class NamedFiltersContainerDescriptor : IsADictionaryDescriptor, INamedFiltersContainer, string, IQueryContainer>
+ where T : class
+ {
+ public NamedFiltersContainerDescriptor() : base(new NamedFiltersContainer()) { }
+
+ public NamedFiltersContainerDescriptor Filter(string name, IQueryContainer filter) => Assign(name, filter);
+
+ public NamedFiltersContainerDescriptor Filter(string name, Func, IQueryContainer> selector) =>
+ Assign(name, selector?.Invoke(new QueryContainerDescriptor()));
+
+ public NamedFiltersContainerDescriptor Filter(string name, Func, IQueryContainer> selector)
+ where TOther : class =>
+ Assign(name, selector?.Invoke(new QueryContainerDescriptor()));
+
+ }
+
+}
diff --git a/src/Nest/Aggregations/Bucket/Filters/NamedFiltersContainerBase.cs b/src/Nest/Aggregations/Bucket/Filters/NamedFiltersContainerBase.cs
deleted file mode 100644
index 1bd4391a11e..00000000000
--- a/src/Nest/Aggregations/Bucket/Filters/NamedFiltersContainerBase.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Newtonsoft.Json;
-
-namespace Nest
-{
- [JsonConverter(typeof(CompositeJsonConverter, VerbatimDictionaryKeysJsonConverter>))]
- public interface INamedFiltersContainer
- {
- }
-
- [JsonConverter(typeof(CompositeJsonConverter, VerbatimDictionaryKeysJsonConverter>))]
- public abstract class NamedFiltersContainerBase : IsADictionary, INamedFiltersContainer
- {
- protected NamedFiltersContainerBase () : base() { }
- protected NamedFiltersContainerBase(IDictionary container) : base(container) { }
-
- public static implicit operator NamedFiltersContainerBase(Dictionary container) =>
- new NamedFiltersContainer(container);
-
- public static implicit operator NamedFiltersContainerBase(Dictionary container) =>
- new NamedFiltersContainer(container);
- }
-
- public class NamedFiltersContainer: NamedFiltersContainerBase
- {
- public NamedFiltersContainer() : base() { }
- public NamedFiltersContainer(IDictionary container) : base(container) { }
- public NamedFiltersContainer(Dictionary container)
- : base(container.Select(kv => kv).ToDictionary(kv => kv.Key, kv => (IQueryContainer)kv.Value))
- { }
-
- public void Add(string name, IQueryContainer filter) => BackingDictionary.Add(name, filter);
- public void Add(string name, QueryContainer filter) => BackingDictionary.Add(name, filter);
- }
-
- public class NamedFiltersContainerDescriptor: NamedFiltersContainerBase
- where T : class
- {
- public NamedFiltersContainerDescriptor() : base() { }
- protected NamedFiltersContainerDescriptor(IDictionary container) : base(container) { }
-
- public NamedFiltersContainerDescriptor Filter(string name, IQueryContainer filter)
- {
- BackingDictionary.Add(name, filter);
- return this;
- }
-
- public NamedFiltersContainerDescriptor Filter(string name, Func, IQueryContainer> selector)
- {
- var filter = selector?.Invoke(new QueryContainerDescriptor());
- if (filter != null) BackingDictionary.Add(name, filter);
- return this;
- }
-
- public NamedFiltersContainerDescriptor Filter(string name, Func, IQueryContainer> selector)
- where TOther : class
- {
- var filter = selector?.Invoke(new QueryContainerDescriptor());
- if (filter != null) BackingDictionary.Add(name, filter);
- return this;
- }
- }
-
-}
diff --git a/src/Nest/Aggregations/Bucket/GeoDistance/GeoDistanceAggregation.cs b/src/Nest/Aggregations/Bucket/GeoDistance/GeoDistanceAggregation.cs
index 74007f9f014..dfed35170ec 100644
--- a/src/Nest/Aggregations/Bucket/GeoDistance/GeoDistanceAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/GeoDistance/GeoDistanceAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IGeoDistanceAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/GeoHashGrid/GeoHashGridAggregation.cs b/src/Nest/Aggregations/Bucket/GeoHashGrid/GeoHashGridAggregation.cs
index 19fa27f57ef..04658495ea3 100644
--- a/src/Nest/Aggregations/Bucket/GeoHashGrid/GeoHashGridAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/GeoHashGrid/GeoHashGridAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IGeoHashGridAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/Global/GlobalAggregation.cs b/src/Nest/Aggregations/Bucket/Global/GlobalAggregation.cs
index bb27b04be8b..4a2f080e1dc 100644
--- a/src/Nest/Aggregations/Bucket/Global/GlobalAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Global/GlobalAggregation.cs
@@ -4,7 +4,7 @@ namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IGlobalAggregation : IBucketAggregation { }
public class GlobalAggregation : BucketAggregationBase, IGlobalAggregation
diff --git a/src/Nest/Aggregations/Bucket/Histogram/HistogramAggregation.cs b/src/Nest/Aggregations/Bucket/Histogram/HistogramAggregation.cs
index a80f26d10fb..5ef88c8a4dd 100644
--- a/src/Nest/Aggregations/Bucket/Histogram/HistogramAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Histogram/HistogramAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IHistogramAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/IpRange/IpRange.cs b/src/Nest/Aggregations/Bucket/IpRange/IpRange.cs
index 33c2c3ec121..1cd95364f52 100644
--- a/src/Nest/Aggregations/Bucket/IpRange/IpRange.cs
+++ b/src/Nest/Aggregations/Bucket/IpRange/IpRange.cs
@@ -5,7 +5,7 @@ namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IIpRange : INestSerializable
+ public interface IIpRange
{
[JsonProperty(PropertyName = "from")]
string From { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/IpRange/IpRangeAggregation.cs b/src/Nest/Aggregations/Bucket/IpRange/IpRangeAggregation.cs
index 61195c59e01..3d63b43e92f 100644
--- a/src/Nest/Aggregations/Bucket/IpRange/IpRangeAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/IpRange/IpRangeAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IIpRangeAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/Missing/MissingAggregation.cs b/src/Nest/Aggregations/Bucket/Missing/MissingAggregation.cs
index fad1ee95aab..994188483d0 100644
--- a/src/Nest/Aggregations/Bucket/Missing/MissingAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Missing/MissingAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IMissingAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/Nested/NestedAggregation.cs b/src/Nest/Aggregations/Bucket/Nested/NestedAggregation.cs
index 14d8f710ff4..be9c4c6a2e6 100644
--- a/src/Nest/Aggregations/Bucket/Nested/NestedAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Nested/NestedAggregation.cs
@@ -5,7 +5,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface INestedAggregation : IBucketAggregation
{
[JsonProperty("path")]
diff --git a/src/Nest/Aggregations/Bucket/Range/RangeAggregation.cs b/src/Nest/Aggregations/Bucket/Range/RangeAggregation.cs
index 97812b5b5b0..a5b8d1609a2 100644
--- a/src/Nest/Aggregations/Bucket/Range/RangeAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Range/RangeAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IRangeAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/ReverseNested/ReverseNestedAggregation.cs b/src/Nest/Aggregations/Bucket/ReverseNested/ReverseNestedAggregation.cs
index 5cea9a3789b..97dab48c7af 100644
--- a/src/Nest/Aggregations/Bucket/ReverseNested/ReverseNestedAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/ReverseNested/ReverseNestedAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IReverseNestedAggregation : IBucketAggregation
{
[JsonProperty("path")]
diff --git a/src/Nest/Aggregations/Bucket/Sampler/SamplerAggregation.cs b/src/Nest/Aggregations/Bucket/Sampler/SamplerAggregation.cs
index 6cad22dc771..89aeebc696d 100644
--- a/src/Nest/Aggregations/Bucket/Sampler/SamplerAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Sampler/SamplerAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ISamplerAggregation : IBucketAggregation
{
[JsonProperty("shard_size")]
diff --git a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ChiSquareHeuristic.cs b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ChiSquareHeuristic.cs
index fd7da433a68..2ae3033eeab 100644
--- a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ChiSquareHeuristic.cs
+++ b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ChiSquareHeuristic.cs
@@ -5,7 +5,7 @@ namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IChiSquareHeuristic : INestSerializable
+ public interface IChiSquareHeuristic
{
[JsonProperty("include_negatives")]
bool? IncludeNegatives { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/GoogleNormalizedDistanceHeuristic.cs b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/GoogleNormalizedDistanceHeuristic.cs
index cd93bf13dcb..51a1a1c8996 100644
--- a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/GoogleNormalizedDistanceHeuristic.cs
+++ b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/GoogleNormalizedDistanceHeuristic.cs
@@ -4,7 +4,7 @@ namespace Nest
{
[JsonObject]
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IGoogleNormalizedDistanceHeuristic : INestSerializable
+ public interface IGoogleNormalizedDistanceHeuristic
{
[JsonProperty("background_is_superset")]
bool? BackgroundIsSuperSet { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/MutualInformationHeuristic.cs b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/MutualInformationHeuristic.cs
index 9221ae4c492..fcd76090a12 100644
--- a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/MutualInformationHeuristic.cs
+++ b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/MutualInformationHeuristic.cs
@@ -4,7 +4,7 @@ namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IMutualInformationHeuristic : INestSerializable
+ public interface IMutualInformationHeuristic
{
[JsonProperty("include_negatives")]
bool? IncludeNegatives { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/PercentageScoreHeuristic.cs b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/PercentageScoreHeuristic.cs
index 71bdac28dd1..16782ff88dc 100644
--- a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/PercentageScoreHeuristic.cs
+++ b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/PercentageScoreHeuristic.cs
@@ -4,7 +4,7 @@ namespace Nest
{
[JsonObject]
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IPercentageScoreHeuristic : INestSerializable { }
+ public interface IPercentageScoreHeuristic { }
public class PercentageScoreHeuristic { }
diff --git a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ScriptedHeuristic.cs b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ScriptedHeuristic.cs
index 6a721fc2393..823830fb373 100644
--- a/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ScriptedHeuristic.cs
+++ b/src/Nest/Aggregations/Bucket/SignificantTerms/Heuristics/ScriptedHeuristic.cs
@@ -6,7 +6,7 @@ namespace Nest
{
[JsonObject]
[JsonConverter(typeof(ReadAsTypeJsonConverter))]
- public interface IScriptedHeuristic : INestSerializable
+ public interface IScriptedHeuristic
{
[JsonProperty("script")]
IScript Script { get; set; }
diff --git a/src/Nest/Aggregations/Bucket/SignificantTerms/SignificantTermsAggregation.cs b/src/Nest/Aggregations/Bucket/SignificantTerms/SignificantTermsAggregation.cs
index f3f23ffc044..77f4e9c14e7 100644
--- a/src/Nest/Aggregations/Bucket/SignificantTerms/SignificantTermsAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/SignificantTerms/SignificantTermsAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ISignificantTermsAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs b/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs
index 301e340cf6c..1956d13d345 100644
--- a/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs
+++ b/src/Nest/Aggregations/Bucket/Terms/TermsAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ITermsAggregation : IBucketAggregation
{
[JsonProperty("field")]
diff --git a/src/Nest/Aggregations/Metric/Average/AverageAggregation.cs b/src/Nest/Aggregations/Metric/Average/AverageAggregation.cs
index c6c2ba5f842..174b1a958c9 100644
--- a/src/Nest/Aggregations/Metric/Average/AverageAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Average/AverageAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IAverageAggregation : IMetricAggregation { }
public class AverageAggregation : MetricAggregationBase, IAverageAggregation
diff --git a/src/Nest/Aggregations/Metric/Cardinality/CardinalityAggregation.cs b/src/Nest/Aggregations/Metric/Cardinality/CardinalityAggregation.cs
index 1f813ed130d..4153edd1af9 100644
--- a/src/Nest/Aggregations/Metric/Cardinality/CardinalityAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Cardinality/CardinalityAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ICardinalityAggregation : IMetricAggregation
{
[JsonProperty("precision_threshold")]
diff --git a/src/Nest/Aggregations/Metric/ExtendedStats/ExtendedStatsAggregation.cs b/src/Nest/Aggregations/Metric/ExtendedStats/ExtendedStatsAggregation.cs
index 255b1bc48d1..73faa5ddb6b 100644
--- a/src/Nest/Aggregations/Metric/ExtendedStats/ExtendedStatsAggregation.cs
+++ b/src/Nest/Aggregations/Metric/ExtendedStats/ExtendedStatsAggregation.cs
@@ -3,7 +3,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IExtendedStatsAggregation : IMetricAggregation { }
public class ExtendedStatsAggregation : MetricAggregationBase, IExtendedStatsAggregation
diff --git a/src/Nest/Aggregations/Metric/GeoBounds/GeoBoundsAggregation.cs b/src/Nest/Aggregations/Metric/GeoBounds/GeoBoundsAggregation.cs
index c2454307773..af3746680ee 100644
--- a/src/Nest/Aggregations/Metric/GeoBounds/GeoBoundsAggregation.cs
+++ b/src/Nest/Aggregations/Metric/GeoBounds/GeoBoundsAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IGeoBoundsAggregation : IMetricAggregation
{
[JsonProperty("wrap_longitude")]
diff --git a/src/Nest/Aggregations/Metric/Max/MaxAggregation.cs b/src/Nest/Aggregations/Metric/Max/MaxAggregation.cs
index 07bd4d270db..c2ae6dc71cf 100644
--- a/src/Nest/Aggregations/Metric/Max/MaxAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Max/MaxAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IMaxAggregation : IMetricAggregation { }
public class MaxAggregation : MetricAggregationBase, IMaxAggregation
diff --git a/src/Nest/Aggregations/Metric/MetricAggregationBase.cs b/src/Nest/Aggregations/Metric/MetricAggregationBase.cs
index d50bab1e702..08f6e29e5b9 100644
--- a/src/Nest/Aggregations/Metric/MetricAggregationBase.cs
+++ b/src/Nest/Aggregations/Metric/MetricAggregationBase.cs
@@ -33,17 +33,12 @@ protected MetricAggregationBase(string name, Field field) : base(name)
}
public abstract class MetricAggregationDescriptorBase
- : IMetricAggregation
+ : DescriptorBase, IMetricAggregation
where TMetricAggregation : MetricAggregationDescriptorBase
, TMetricAggregationInterface, IMetricAggregation
where T : class
where TMetricAggregationInterface : class, IMetricAggregation
{
- protected TMetricAggregation Assign(Action assigner) =>
- Fluent.Assign(((TMetricAggregation)this), assigner);
-
- protected TMetricAggregationInterface Self => (TMetricAggregation)this;
-
Field IMetricAggregation.Field { get; set; }
IScript IMetricAggregation.Script { get; set; }
diff --git a/src/Nest/Aggregations/Metric/Min/MinAggregation.cs b/src/Nest/Aggregations/Metric/Min/MinAggregation.cs
index 0779990fc30..7cd2c160b9a 100644
--- a/src/Nest/Aggregations/Metric/Min/MinAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Min/MinAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IMinAggregation : IMetricAggregation { }
public class MinAggregation : MetricAggregationBase, IMinAggregation
diff --git a/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregation.cs b/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregation.cs
index cb09961f2a1..b504495035b 100644
--- a/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregation.cs
+++ b/src/Nest/Aggregations/Metric/PercentileRanks/PercentileRanksAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
- [JsonConverter(typeof(PercentileRanksAggregationJsonConverter))]
+ [ContractJsonConverter(typeof(PercentileRanksAggregationJsonConverter))]
public interface IPercentileRanksAggregation : IMetricAggregation
{
IEnumerable Values { get; set; }
diff --git a/src/Nest/Aggregations/Metric/Percentiles/Methods/IPercentilesMethod.cs b/src/Nest/Aggregations/Metric/Percentiles/Methods/IPercentilesMethod.cs
index af4534aeadb..199087fd0dc 100644
--- a/src/Nest/Aggregations/Metric/Percentiles/Methods/IPercentilesMethod.cs
+++ b/src/Nest/Aggregations/Metric/Percentiles/Methods/IPercentilesMethod.cs
@@ -9,11 +9,9 @@
namespace Nest
{
- public interface IPercentilesMethod
- {
- }
+ public interface IPercentilesMethod { }
- public class PercentilesMethodDescriptor
+ public class PercentilesMethodDescriptor : DescriptorBase, IPercentilesMethod
{
public IPercentilesMethod HDRHistogram(Func hdrSelector = null) =>
hdrSelector?.InvokeOrDefault(new HDRHistogramMethodDescriptor());
diff --git a/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregation.cs b/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregation.cs
index b8c1745b79f..38bc816292a 100644
--- a/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
- [JsonConverter(typeof(PercentilesAggregationJsonConverter))]
+ [ContractJsonConverter(typeof(PercentilesAggregationJsonConverter))]
public interface IPercentilesAggregation : IMetricAggregation
{
IEnumerable Percents { get; set; }
diff --git a/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregationJsonConverter.cs b/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregationJsonConverter.cs
index 26344609c50..0fe99082f1e 100644
--- a/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregationJsonConverter.cs
+++ b/src/Nest/Aggregations/Metric/Percentiles/PercentilesAggregationJsonConverter.cs
@@ -103,12 +103,12 @@ protected void WriteMethodProperty(IPercentilesMethod method, JsonWriter writer,
protected void WriteMetricProperties(IMetricAggregation metric, JsonWriter writer, JsonSerializer serializer)
{
- var contract = serializer.ContractResolver as SettingsContractResolver;
if (metric.Field != null)
{
+ var settings = serializer.GetConnectionSettings();
writer.WritePropertyName("field");
- writer.WriteValue(contract.Infer.Field(metric.Field));
+ writer.WriteValue(settings.Inferrer.Field(metric.Field));
}
if (metric.Script != null)
diff --git a/src/Nest/Aggregations/Metric/ScriptedMetric/ScriptedMetricAggregation.cs b/src/Nest/Aggregations/Metric/ScriptedMetric/ScriptedMetricAggregation.cs
index aac26810152..dcfbfe56ba1 100644
--- a/src/Nest/Aggregations/Metric/ScriptedMetric/ScriptedMetricAggregation.cs
+++ b/src/Nest/Aggregations/Metric/ScriptedMetric/ScriptedMetricAggregation.cs
@@ -7,7 +7,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IScriptedMetricAggregation : IMetricAggregation
{
[JsonProperty("init_script")]
diff --git a/src/Nest/Aggregations/Metric/Stats/StatsAggregation.cs b/src/Nest/Aggregations/Metric/Stats/StatsAggregation.cs
index b118edcff2b..a4102427b14 100644
--- a/src/Nest/Aggregations/Metric/Stats/StatsAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Stats/StatsAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IStatsAggregator : IMetricAggregation { }
public class StatsAggregation : MetricAggregationBase, IStatsAggregator
diff --git a/src/Nest/Aggregations/Metric/Sum/SumAggregation.cs b/src/Nest/Aggregations/Metric/Sum/SumAggregation.cs
index c8894e56fd0..b604893e93d 100644
--- a/src/Nest/Aggregations/Metric/Sum/SumAggregation.cs
+++ b/src/Nest/Aggregations/Metric/Sum/SumAggregation.cs
@@ -6,7 +6,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ISumAggregation : IMetricAggregation { }
public class SumAggregation : MetricAggregationBase, ISumAggregation
diff --git a/src/Nest/Aggregations/Metric/TopHits/TopHitsAggregation.cs b/src/Nest/Aggregations/Metric/TopHits/TopHitsAggregation.cs
index e7c0cce174c..33eb84dfa26 100644
--- a/src/Nest/Aggregations/Metric/TopHits/TopHitsAggregation.cs
+++ b/src/Nest/Aggregations/Metric/TopHits/TopHitsAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ITopHitsAggregation : IMetricAggregation
{
[JsonProperty("from")]
@@ -18,7 +18,6 @@ public interface ITopHitsAggregation : IMetricAggregation
int? Size { get; set; }
[JsonProperty("sort")]
- [JsonConverter(typeof(SortCollectionJsonConverter))]
IList Sort { get; set; }
[JsonProperty("_source")]
diff --git a/src/Nest/Aggregations/Metric/ValueCount/ValueCountAggregation.cs b/src/Nest/Aggregations/Metric/ValueCount/ValueCountAggregation.cs
index 9d258954098..5a2955134f1 100644
--- a/src/Nest/Aggregations/Metric/ValueCount/ValueCountAggregation.cs
+++ b/src/Nest/Aggregations/Metric/ValueCount/ValueCountAggregation.cs
@@ -5,7 +5,7 @@ namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IValueCountAggregation : IMetricAggregation { }
public class ValueCountAggregation : MetricAggregationBase, IValueCountAggregation
diff --git a/src/Nest/Aggregations/Pipeline/AverageBucket/AverageBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/AverageBucket/AverageBucketAggregation.cs
index 12509d38227..2e69c7afdc1 100644
--- a/src/Nest/Aggregations/Pipeline/AverageBucket/AverageBucketAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/AverageBucket/AverageBucketAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IAverageBucketAggregation : IPipelineAggregation { }
public class AverageBucketAggregation
diff --git a/src/Nest/Aggregations/Pipeline/BucketScript/BucketScriptAggregation.cs b/src/Nest/Aggregations/Pipeline/BucketScript/BucketScriptAggregation.cs
index 2b13c8dd3dc..c66d5dd608d 100644
--- a/src/Nest/Aggregations/Pipeline/BucketScript/BucketScriptAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/BucketScript/BucketScriptAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IBucketScriptAggregation : IPipelineAggregation
{
[JsonProperty("script")]
diff --git a/src/Nest/Aggregations/Pipeline/BucketSelector/BucketSelectorAggregation.cs b/src/Nest/Aggregations/Pipeline/BucketSelector/BucketSelectorAggregation.cs
index d068e1a6237..6895c3c2bfd 100644
--- a/src/Nest/Aggregations/Pipeline/BucketSelector/BucketSelectorAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/BucketSelector/BucketSelectorAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IBucketSelectorAggregation : IPipelineAggregation
{
[JsonProperty("script")]
diff --git a/src/Nest/Aggregations/Pipeline/CumulativeSum/CumulativeSumAggregation.cs b/src/Nest/Aggregations/Pipeline/CumulativeSum/CumulativeSumAggregation.cs
index bbb569167f2..7eddc3f31b9 100644
--- a/src/Nest/Aggregations/Pipeline/CumulativeSum/CumulativeSumAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/CumulativeSum/CumulativeSumAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ICumulativeSumAggregation : IPipelineAggregation { }
public class CumulativeSumAggregation
diff --git a/src/Nest/Aggregations/Pipeline/Derivative/DerivativeAggregation.cs b/src/Nest/Aggregations/Pipeline/Derivative/DerivativeAggregation.cs
index cdfdff58f2a..b97bd7db948 100644
--- a/src/Nest/Aggregations/Pipeline/Derivative/DerivativeAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/Derivative/DerivativeAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IDerivativeAggregation : IPipelineAggregation { }
public class DerivativeAggregation : PipelineAggregationBase, IDerivativeAggregation
diff --git a/src/Nest/Aggregations/Pipeline/MaxBucket/MaxBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/MaxBucket/MaxBucketAggregation.cs
index c4367a02cd0..b2fe842a5cc 100644
--- a/src/Nest/Aggregations/Pipeline/MaxBucket/MaxBucketAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/MaxBucket/MaxBucketAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IMaxBucketAggregation : IPipelineAggregation { }
public class MaxBucketAggregation
diff --git a/src/Nest/Aggregations/Pipeline/MinBucket/MinBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/MinBucket/MinBucketAggregation.cs
index 741e4d68d24..92ac4afd76a 100644
--- a/src/Nest/Aggregations/Pipeline/MinBucket/MinBucketAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/MinBucket/MinBucketAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface IMinBucketAggregation : IPipelineAggregation { }
public class MinBucketAggregation
diff --git a/src/Nest/Aggregations/Pipeline/MovingAverage/Models/IMovingAverageModel.cs b/src/Nest/Aggregations/Pipeline/MovingAverage/Models/IMovingAverageModel.cs
index eb2bbc87ed7..30e24dc4c2b 100644
--- a/src/Nest/Aggregations/Pipeline/MovingAverage/Models/IMovingAverageModel.cs
+++ b/src/Nest/Aggregations/Pipeline/MovingAverage/Models/IMovingAverageModel.cs
@@ -6,12 +6,12 @@
namespace Nest
{
- public interface IMovingAverageModel : INestSerializable
+ public interface IMovingAverageModel
{
string Name { get; }
}
- public class MovingAverageModelDescriptor
+ public class MovingAverageModelDescriptor : DescriptorBase
{
public IEwmaModel Ewma(Func ewmaSelector = null) =>
ewmaSelector.InvokeOrDefault(new EwmaModelDescriptor());
diff --git a/src/Nest/Aggregations/Pipeline/MovingAverage/MovingAverageAggregation.cs b/src/Nest/Aggregations/Pipeline/MovingAverage/MovingAverageAggregation.cs
index 1d7bbc7f7d4..4abde3269d5 100644
--- a/src/Nest/Aggregations/Pipeline/MovingAverage/MovingAverageAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/MovingAverage/MovingAverageAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(MovingAverageAggregationJsonConverter))]
+ [ContractJsonConverter(typeof(MovingAverageAggregationJsonConverter))]
public interface IMovingAverageAggregation : IPipelineAggregation
{
IMovingAverageModel Model { get; set; }
@@ -56,5 +56,6 @@ public class MovingAverageAggregationDescriptor
public MovingAverageAggregationDescriptor Model(Func modelSelector) =>
Assign(a => a.Model = modelSelector?.Invoke(new MovingAverageModelDescriptor()));
+
}
}
diff --git a/src/Nest/Aggregations/Pipeline/PipelineAggregationBase.cs b/src/Nest/Aggregations/Pipeline/PipelineAggregationBase.cs
index c2c71c0e2b4..d2f8617d760 100644
--- a/src/Nest/Aggregations/Pipeline/PipelineAggregationBase.cs
+++ b/src/Nest/Aggregations/Pipeline/PipelineAggregationBase.cs
@@ -34,8 +34,8 @@ public PipelineAggregationBase(string name, IBucketsPath bucketsPath) : base(nam
public GapPolicy? GapPolicy { get; set; }
}
- public abstract class PipelineAggregationDescriptorBase
- : IPipelineAggregation
+ public abstract class PipelineAggregationDescriptorBase
+ : DescriptorBase, IPipelineAggregation
where TPipelineAggregation : PipelineAggregationDescriptorBase
, TPipelineAggregationInterface, IPipelineAggregation
where TPipelineAggregationInterface : class, IPipelineAggregation
@@ -45,9 +45,6 @@ public abstract class PipelineAggregationDescriptorBase assigner) =>
- Fluent.Assign(((TPipelineAggregation)this), assigner);
-
public TPipelineAggregation Format(string format) => Assign(a => a.Format = format);
public TPipelineAggregation GapPolicy(GapPolicy gapPolicy) => Assign(a => a.GapPolicy = gapPolicy);
diff --git a/src/Nest/Aggregations/Pipeline/SerialDifferencing/SerialDifferencingAggregation.cs b/src/Nest/Aggregations/Pipeline/SerialDifferencing/SerialDifferencingAggregation.cs
index d306591a6dd..75aedd58a83 100644
--- a/src/Nest/Aggregations/Pipeline/SerialDifferencing/SerialDifferencingAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/SerialDifferencing/SerialDifferencingAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ISerialDifferencingAggregation : IPipelineAggregation
{
[JsonProperty("lag")]
diff --git a/src/Nest/Aggregations/Pipeline/SumBucket/SumBucketAggregation.cs b/src/Nest/Aggregations/Pipeline/SumBucket/SumBucketAggregation.cs
index a4c9829a030..9f5e6952a71 100644
--- a/src/Nest/Aggregations/Pipeline/SumBucket/SumBucketAggregation.cs
+++ b/src/Nest/Aggregations/Pipeline/SumBucket/SumBucketAggregation.cs
@@ -8,7 +8,7 @@
namespace Nest
{
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
- [JsonConverter(typeof(ReadAsTypeJsonConverter))]
+ [ContractJsonConverter(typeof(AggregationJsonConverter))]
public interface ISumBucketAggregation : IPipelineAggregation { }
public class SumBucketAggregation
diff --git a/src/Nest/Analysis/Analyzers/AnalyzerBase.cs b/src/Nest/Analysis/Analyzers/AnalyzerBase.cs
index bc64ed4bb20..7467eda7fc3 100644
--- a/src/Nest/Analysis/Analyzers/AnalyzerBase.cs
+++ b/src/Nest/Analysis/Analyzers/AnalyzerBase.cs
@@ -5,6 +5,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(AnalyzerJsonConverter))]
public interface IAnalyzer
{
[JsonProperty(PropertyName = "version")]
diff --git a/src/Nest/Analysis/CharFilters/CharFilterBase.cs b/src/Nest/Analysis/CharFilters/CharFilterBase.cs
index d3630f25909..7722fbe878b 100644
--- a/src/Nest/Analysis/CharFilters/CharFilterBase.cs
+++ b/src/Nest/Analysis/CharFilters/CharFilterBase.cs
@@ -3,6 +3,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(CharFilterJsonConverter))]
public interface ICharFilter
{
[JsonProperty("version")]
diff --git a/src/Nest/Analysis/TokenFilters/TokenFilterBase.cs b/src/Nest/Analysis/TokenFilters/TokenFilterBase.cs
index 13e7968fc63..3fe5f5ccd52 100644
--- a/src/Nest/Analysis/TokenFilters/TokenFilterBase.cs
+++ b/src/Nest/Analysis/TokenFilters/TokenFilterBase.cs
@@ -4,6 +4,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(TokenFilterJsonConverter))]
public interface ITokenFilter
{
[JsonProperty("version")]
diff --git a/src/Nest/Analysis/Tokenizers/TokenizerBase.cs b/src/Nest/Analysis/Tokenizers/TokenizerBase.cs
index 203a5afb033..8cb1e6c6448 100644
--- a/src/Nest/Analysis/Tokenizers/TokenizerBase.cs
+++ b/src/Nest/Analysis/Tokenizers/TokenizerBase.cs
@@ -5,6 +5,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(TokenizerJsonConverter))]
public interface ITokenizer
{
[JsonProperty(PropertyName = "version")]
diff --git a/src/Nest/Cluster/ClusterReroute/Commands/IClusterRerouteCommand.cs b/src/Nest/Cluster/ClusterReroute/Commands/IClusterRerouteCommand.cs
index 8d9374fbcfa..9721142fa66 100644
--- a/src/Nest/Cluster/ClusterReroute/Commands/IClusterRerouteCommand.cs
+++ b/src/Nest/Cluster/ClusterReroute/Commands/IClusterRerouteCommand.cs
@@ -6,6 +6,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(ClusterRerouteCommandJsonConverter))]
public interface IClusterRerouteCommand
{
[JsonIgnore]
diff --git a/src/Nest/CommonAbstractions/ConnectionSettings/ClrTypeMapping.cs b/src/Nest/CommonAbstractions/ConnectionSettings/ClrTypeMapping.cs
index 1d1b5f2baa9..4db9922a9a9 100644
--- a/src/Nest/CommonAbstractions/ConnectionSettings/ClrTypeMapping.cs
+++ b/src/Nest/CommonAbstractions/ConnectionSettings/ClrTypeMapping.cs
@@ -54,46 +54,41 @@ public class ClrTypeMapping : IClrTypeMapping where T : class
public IList> Properties { get; set; }
}
- public class ClrTypeMappingDescriptor : IClrTypeMapping where T : class
+ public class ClrTypeMappingDescriptor : DescriptorBase,IClrTypeMapping> , IClrTypeMapping
+ where T : class
{
- ClrTypeMappingDescriptor _assign(Action> assigner) => Fluent.Assign(this, assigner);
-
Type IClrTypeMapping.Type { get; } = typeof (T);
-
string IClrTypeMapping.IndexName { get; set; }
-
string IClrTypeMapping.TypeName { get; set; }
-
Expression> IClrTypeMapping.IdProperty { get; set; }
-
IList> IClrTypeMapping.Properties { get; set; } = new List>();
///
/// When specified dictates the default Elasticsearch index name for
///
- public ClrTypeMappingDescriptor IndexName(string indexName) => _assign(a => a.IndexName = indexName);
+ public ClrTypeMappingDescriptor IndexName(string indexName) => Assign(a => a.IndexName = indexName);
///
/// When specified dictates the default Elasticsearch type name for
///
- public ClrTypeMappingDescriptor TypeName(string typeName) => _assign(a => a.TypeName = typeName);
+ public ClrTypeMappingDescriptor TypeName(string typeName) => Assign(a => a.TypeName = typeName);
///
/// Allows you to set a default Id property on that NEST will evaluate
///
- public ClrTypeMappingDescriptor IdProperty(Expression> property) => _assign(a => a.IdProperty = property);
+ public ClrTypeMappingDescriptor IdProperty(Expression> property) => Assign(a => a.IdProperty = property);
///
/// When specified allows you to ignore on clr type
///
public ClrTypeMappingDescriptor Ignore(Expression> property) =>
- _assign(a => a.Properties.Add(new IgnorePropertyMapping(property)));
+ Assign(a => a.Properties.Add(new IgnorePropertyMapping(property)));
///
/// When specified allows you to rename on clr type
///
public ClrTypeMappingDescriptor Rename(Expression> property, string newName) =>
- _assign(a => a.Properties.Add(new RenamePropertyMapping(property, newName)));
+ Assign(a => a.Properties.Add(new RenamePropertyMapping(property, newName)));
}
@@ -121,11 +116,7 @@ protected ClrPropertyMappingBase(Expression> property)
Self.Property = property;
}
- IPropertyMapping IClrTypePropertyMapping.ToPropertyMapping()
- {
- if (Self.Ignore) return PropertyMapping.Ignored;
- return new PropertyMapping {Name = Self.NewName};
- }
+ IPropertyMapping IClrTypePropertyMapping.ToPropertyMapping() => Self.Ignore ? PropertyMapping.Ignored : new PropertyMapping {Name = Self.NewName};
}
public class IgnorePropertyMapping : ClrPropertyMappingBase where T : class
diff --git a/src/Nest/CommonAbstractions/Extensions/JsonExtensions.cs b/src/Nest/CommonAbstractions/Extensions/JsonExtensions.cs
new file mode 100644
index 00000000000..92ff0928ada
--- /dev/null
+++ b/src/Nest/CommonAbstractions/Extensions/JsonExtensions.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Nest.Resolvers;
+using Newtonsoft.Json;
+
+namespace Nest
+{
+ internal static class JsonExtensions
+ {
+ public static IConnectionSettingsValues GetConnectionSettings(this JsonSerializer serializer)
+ {
+ var contract = serializer.ContractResolver as ElasticContractResolver;
+ if (contract?.ConnectionSettings == null)
+ throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
+ return contract.ConnectionSettings;
+ }
+
+ public static TConverter GetStatefulConverter(this JsonSerializer serializer)
+ where TConverter : JsonConverter
+ {
+ var resolver = serializer.ContractResolver as ElasticContractResolver;
+ var realConverter = resolver?.PiggyBackState?.ActualJsonConverter as TConverter;
+ if (realConverter == null)
+ throw new DslException($"could not find a stateful {typeof(TConverter).Name} converter");
+
+ return realConverter;
+ }
+ }
+}
diff --git a/src/Nest/CommonAbstractions/Infer/Features/FeaturesJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Features/FeaturesJsonConverter.cs
index 96bf6045a02..a744bd8b418 100644
--- a/src/Nest/CommonAbstractions/Infer/Features/FeaturesJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Features/FeaturesJsonConverter.cs
@@ -19,10 +19,8 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract?.ConnectionSettings == null)
- throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
- var s = ((IUrlParameter)marker).GetString(contract.ConnectionSettings);
+ var settings = serializer.GetConnectionSettings();
+ var s = ((IUrlParameter)marker).GetString(settings);
writer.WriteValue(s);
}
diff --git a/src/Nest/CommonAbstractions/Infer/Field/Field.cs b/src/Nest/CommonAbstractions/Infer/Field/Field.cs
index cbd8e6f148d..e153535dac3 100644
--- a/src/Nest/CommonAbstractions/Infer/Field/Field.cs
+++ b/src/Nest/CommonAbstractions/Infer/Field/Field.cs
@@ -9,6 +9,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(FieldJsonConverter))]
public class Field : IEquatable, IUrlParameter
{
public string Name { get; set; }
diff --git a/src/Nest/CommonAbstractions/Infer/Field/FieldJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Field/FieldJsonConverter.cs
index 0cf8d72b6fc..35554881cbc 100644
--- a/src/Nest/CommonAbstractions/Infer/Field/FieldJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Field/FieldJsonConverter.cs
@@ -7,12 +7,6 @@ namespace Nest
{
internal class FieldJsonConverter : JsonConverter
{
- private readonly ElasticInferrer _infer;
- public FieldJsonConverter(IConnectionSettingsValues connectionSettings)
- {
- _infer = new ElasticInferrer(connectionSettings);
- }
-
public override bool CanRead => false;
public override bool CanWrite => true;
@@ -27,7 +21,8 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- writer.WriteValue(this._infer.Field(field));
+ var settings = serializer.GetConnectionSettings();
+ writer.WriteValue(settings.Inferrer.Field(field));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
diff --git a/src/Nest/CommonAbstractions/Infer/Fields/Fields.cs b/src/Nest/CommonAbstractions/Infer/Fields/Fields.cs
index 191761bbda4..8ba3fe563db 100644
--- a/src/Nest/CommonAbstractions/Infer/Fields/Fields.cs
+++ b/src/Nest/CommonAbstractions/Infer/Fields/Fields.cs
@@ -9,6 +9,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(FieldsJsonConverter))]
public class Fields : IUrlParameter
{
internal readonly List ListOfFields;
diff --git a/src/Nest/CommonAbstractions/Infer/Fields/FieldsJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Fields/FieldsJsonConverter.cs
index ede0a59f688..9e292e7bbbc 100644
--- a/src/Nest/CommonAbstractions/Infer/Fields/FieldsJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Fields/FieldsJsonConverter.cs
@@ -7,12 +7,6 @@ namespace Nest
{
internal class FieldsJsonConverter : JsonConverter
{
- private readonly ElasticInferrer _infer;
- public FieldsJsonConverter(IConnectionSettingsValues connectionSettings)
- {
- _infer = new ElasticInferrer(connectionSettings);
- }
-
public override bool CanRead => true;
public override bool CanWrite => true;
@@ -23,9 +17,10 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
{
var fields = value as Fields;
writer.WriteStartArray();
+ var infer = serializer.GetConnectionSettings().Inferrer;
foreach (var f in fields?.ListOfFields ?? Enumerable.Empty())
{
- writer.WriteValue(this._infer.Field(f));
+ writer.WriteValue(infer.Field(f));
}
writer.WriteEndArray();
}
diff --git a/src/Nest/CommonAbstractions/Infer/Id/IdJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Id/IdJsonConverter.cs
index ca3317501b1..863880cd57d 100644
--- a/src/Nest/CommonAbstractions/Infer/Id/IdJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Id/IdJsonConverter.cs
@@ -31,14 +31,10 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
}
if (id.Document != null)
{
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract != null && contract.ConnectionSettings != null)
- {
- var indexName = contract.Infer.Id(id.Document.GetType(), id.Document);
- writer.WriteValue(indexName);
- }
- else throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
- }
+ var settings = serializer.GetConnectionSettings();
+ var indexName = settings.Inferrer.Id(id.Document.GetType(), id.Document);
+ writer.WriteValue(indexName);
+ }
else writer.WriteValue(id.Value);
}
}
diff --git a/src/Nest/CommonAbstractions/Infer/IndexName/IndexName.cs b/src/Nest/CommonAbstractions/Infer/IndexName/IndexName.cs
index ff5abdd330c..be94b46df44 100644
--- a/src/Nest/CommonAbstractions/Infer/IndexName/IndexName.cs
+++ b/src/Nest/CommonAbstractions/Infer/IndexName/IndexName.cs
@@ -7,7 +7,7 @@
namespace Nest
{
- [JsonConverter(typeof(IndexNameJsonConverter))]
+ [ContractJsonConverter(typeof(IndexNameJsonConverter))]
public class IndexName : IEquatable, IUrlParameter
{
public string Name { get; set; }
diff --git a/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameJsonConverter.cs
index 28cdf494d58..c956092e545 100644
--- a/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/IndexName/IndexNameJsonConverter.cs
@@ -19,13 +19,9 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract != null && contract.ConnectionSettings != null)
- {
- var indexName = contract.Infer.IndexName(marker);
- writer.WriteValue(indexName);
- }
- else throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
+ var settings = serializer.GetConnectionSettings();
+ var indexName = settings.Inferrer.IndexName(marker);
+ writer.WriteValue(indexName);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
diff --git a/src/Nest/CommonAbstractions/Infer/Indices/IndicesJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Indices/IndicesJsonConverter.cs
index 1e918d0e992..ca8db61c35b 100644
--- a/src/Nest/CommonAbstractions/Infer/Indices/IndicesJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Indices/IndicesJsonConverter.cs
@@ -19,16 +19,14 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract == null || contract.ConnectionSettings == null)
- throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
marker.Match(
all=> writer.WriteNull(),
many =>
{
+ var settings = serializer.GetConnectionSettings();
writer.WriteStartArray();
foreach(var m in many.Indices.Cast())
- writer.WriteValue(m.GetString(contract.ConnectionSettings));
+ writer.WriteValue(m.GetString(settings));
writer.WriteEndArray();
}
);
diff --git a/src/Nest/CommonAbstractions/Infer/Indices/IndicesMultiSyntaxJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Indices/IndicesMultiSyntaxJsonConverter.cs
index a40ec2a36f6..aa5f11708ff 100644
--- a/src/Nest/CommonAbstractions/Infer/Indices/IndicesMultiSyntaxJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Indices/IndicesMultiSyntaxJsonConverter.cs
@@ -19,12 +19,9 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract == null || contract.ConnectionSettings == null)
- throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
marker.Match(
all=> writer.WriteValue("_all"),
- many => writer.WriteValue(((IUrlParameter)marker).GetString(contract.ConnectionSettings))
+ many => writer.WriteValue(((IUrlParameter)marker).GetString(serializer.GetConnectionSettings()))
);
}
diff --git a/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyName.cs b/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyName.cs
index 30a8cb1b3e9..d9bad64823b 100644
--- a/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyName.cs
+++ b/src/Nest/CommonAbstractions/Infer/PropertyName/PropertyName.cs
@@ -9,6 +9,7 @@
namespace Nest
{
+ [ContractJsonConverter(typeof(PropertyNameJsonConverter))]
public class PropertyName : IEquatable, IUrlParameter
{
public string Name { get; set; }
diff --git a/src/Nest/CommonAbstractions/Infer/TypeName/TypeName.cs b/src/Nest/CommonAbstractions/Infer/TypeName/TypeName.cs
index c87912163e9..b3a9b9e4d6f 100644
--- a/src/Nest/CommonAbstractions/Infer/TypeName/TypeName.cs
+++ b/src/Nest/CommonAbstractions/Infer/TypeName/TypeName.cs
@@ -5,7 +5,7 @@
namespace Nest
{
- [JsonConverter(typeof(TypeNameJsonConverter))]
+ [ContractJsonConverter(typeof(TypeNameJsonConverter))]
public class TypeName : IEquatable , IUrlParameter
{
public string Name { get; set; }
diff --git a/src/Nest/CommonAbstractions/Infer/TypeName/TypeNameJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/TypeName/TypeNameJsonConverter.cs
index f145ca78752..302a6c44655 100644
--- a/src/Nest/CommonAbstractions/Infer/TypeName/TypeNameJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/TypeName/TypeNameJsonConverter.cs
@@ -21,13 +21,10 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract != null && contract.ConnectionSettings != null)
- {
- var typeName = contract.Infer.TypeName(marker);
- writer.WriteValue(typeName);
- }
- else throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
+ var settings = serializer.GetConnectionSettings();
+
+ var typeName = settings.Inferrer.TypeName(marker);
+ writer.WriteValue(typeName);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
diff --git a/src/Nest/CommonAbstractions/Infer/Types/TypesJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Types/TypesJsonConverter.cs
index 137c6c5dcf8..497c25c71ba 100644
--- a/src/Nest/CommonAbstractions/Infer/Types/TypesJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Types/TypesJsonConverter.cs
@@ -19,16 +19,14 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract == null || contract.ConnectionSettings == null)
- throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
marker.Match(
all=> writer.WriteNull(),
many =>
{
+ var settings = serializer.GetConnectionSettings();
writer.WriteStartArray();
foreach(var m in many.Types.Cast())
- writer.WriteValue(m.GetString(contract.ConnectionSettings));
+ writer.WriteValue(m.GetString(settings));
writer.WriteEndArray();
}
);
diff --git a/src/Nest/CommonAbstractions/Infer/Types/TypesMultiSyntaxJsonConverter.cs b/src/Nest/CommonAbstractions/Infer/Types/TypesMultiSyntaxJsonConverter.cs
index a7cc303badd..c293d9b7c2a 100644
--- a/src/Nest/CommonAbstractions/Infer/Types/TypesMultiSyntaxJsonConverter.cs
+++ b/src/Nest/CommonAbstractions/Infer/Types/TypesMultiSyntaxJsonConverter.cs
@@ -19,12 +19,9 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
- var contract = serializer.ContractResolver as SettingsContractResolver;
- if (contract == null || contract.ConnectionSettings == null)
- throw new Exception("If you use a custom contract resolver be sure to subclass from ElasticResolver");
marker.Match(
all=> writer.WriteNull(),
- many => writer.WriteValue(((IUrlParameter)marker).GetString(contract.ConnectionSettings))
+ many => writer.WriteValue(((IUrlParameter)marker).GetString(serializer.GetConnectionSettings()))
);
}
diff --git a/src/Nest/CommonAbstractions/RawJson/ICustomJson.cs b/src/Nest/CommonAbstractions/RawJson/ICustomJson.cs
index b41a43e2d0b..6be6600987a 100644
--- a/src/Nest/CommonAbstractions/RawJson/ICustomJson.cs
+++ b/src/Nest/CommonAbstractions/RawJson/ICustomJson.cs
@@ -10,10 +10,4 @@ public interface ICustomJson
{
object GetCustomJson();
}
-
- ///
- /// Any object that implements this interface will automatically have all
- /// JsonProperties of all of its implementing interfaces discovered.
- ///
- public interface INestSerializable { }
}
\ No newline at end of file
diff --git a/src/Nest/CommonAbstractions/SerializationBehavior/ContractJsonConverterAttribute.cs b/src/Nest/CommonAbstractions/SerializationBehavior/ContractJsonConverterAttribute.cs
new file mode 100644
index 00000000000..0a17493de64
--- /dev/null
+++ b/src/Nest/CommonAbstractions/SerializationBehavior/ContractJsonConverterAttribute.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Newtonsoft.Json;
+
+namespace Nest
+{
+
+ public class ContractJsonConverterAttribute : Attribute
+ {
+ public JsonConverter Converter { get; }
+
+ public ContractJsonConverterAttribute(Type jsonConverter)
+ {
+ if (typeof(JsonConverter).IsAssignableFrom(jsonConverter))
+ {
+ Converter = jsonConverter.CreateInstance();
+ }
+ }
+ }
+ public class ExactContractJsonConverterAttribute : Attribute
+ {
+ public JsonConverter Converter { get; }
+
+ public ExactContractJsonConverterAttribute(Type jsonConverter)
+ {
+ if (typeof(JsonConverter).IsAssignableFrom(jsonConverter))
+ {
+ Converter = jsonConverter.CreateInstance();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Nest/CommonAbstractions/SerializationBehavior/ElasticContractResolver.cs b/src/Nest/CommonAbstractions/SerializationBehavior/ElasticContractResolver.cs
index 62eac823b8a..d3534e69208 100644
--- a/src/Nest/CommonAbstractions/SerializationBehavior/ElasticContractResolver.cs
+++ b/src/Nest/CommonAbstractions/SerializationBehavior/ElasticContractResolver.cs
@@ -9,13 +9,6 @@
namespace Nest.Resolvers
{
-
- internal static class IsPromiseExtension
- {
- public static bool IsAssignableFrom(this Type objectType) where T : class =>
- typeof (T).IsAssignableFrom(objectType);
- }
-
public class ElasticContractResolver : DefaultContractResolver
{
public static JsonSerializer Empty { get; } = new JsonSerializer();
@@ -26,6 +19,11 @@ public class ElasticContractResolver : DefaultContractResolver
///
public IConnectionSettingsValues ConnectionSettings { 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)
{
this.ConnectionSettings = connectionSettings;
@@ -38,44 +36,14 @@ protected override JsonContract CreateContract(Type objectType)
// this will only be called once and then cached
- if (typeof(IDictionary).IsAssignableFrom(objectType)
-
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- && !objectType.IsAssignableFrom()
- )
+ if (typeof(IDictionary).IsAssignableFrom(objectType) && !typeof(IIsADictionary).IsAssignableFrom(objectType))
contract.Converter = new VerbatimDictionaryKeysJsonConverter();
-
- else if (objectType == typeof(IAggregation)) contract.Converter = new AggregationJsonConverter();
- else if (objectType == typeof(ISimilarity)) contract.Converter = new SimilarityJsonConverter();
- else if (objectType == typeof(ICharFilter)) contract.Converter = new CharFilterJsonConverter();
- else if (objectType == typeof(IAnalyzer)) contract.Converter = new AnalyzerJsonConverter();
- else if (objectType == typeof(ITokenizer)) contract.Converter = new TokenizerJsonConverter();
- else if (objectType == typeof(ITokenFilter)) contract.Converter = new TokenFilterJsonConverter();
-
-
-
- else if (typeof(IClusterRerouteCommand).IsAssignableFrom(objectType))
- contract.Converter = new ClusterRerouteCommandJsonConverter();
-
else if (objectType == typeof(DateTime) || objectType == typeof(DateTime?))
contract.Converter = new IsoDateTimeConverter();
+ else if (!objectType.FullName.StartsWith("Nest.", StringComparison.OrdinalIgnoreCase)) return contract;
- else if (objectType == typeof(TypeName)) contract.Converter = new TypeNameJsonConverter();
- else if (objectType == typeof(IndexName)) contract.Converter = new IndexNameJsonConverter();
- else if (objectType == typeof(Fields)) contract.Converter = new FieldsJsonConverter(this.ConnectionSettings);
- else if (objectType == typeof(Field)) contract.Converter = new FieldJsonConverter(this.ConnectionSettings);
- else if (objectType == typeof(PropertyName)) contract.Converter = new PropertyNameJsonConverter(this.ConnectionSettings);
-
- //TODO these should not be necessary here
- else if (objectType == typeof(MultiSearchResponse)) contract.Converter = new MultiSearchJsonConverter();
- else if (objectType == typeof(MultiGetResponse)) contract.Converter = new MultiGetHitJsonConverter();
- else if (typeof(IHit