From 93957da205460e38d37962f04aef67b286a25516 Mon Sep 17 00:00:00 2001 From: Russ Cam Date: Fri, 5 Feb 2016 22:46:30 +1100 Subject: [PATCH] Align serialization with NEST 2.0 implementation This is to handle serializing JObject using the Json.NET contract for it and not treating it as an IEnumerable See https://github.com/elastic/elasticsearch-net/issues/1609 --- .../RequestHandlers/RequestHandlerBase.cs | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Elasticsearch.Net/Connection/RequestHandlers/RequestHandlerBase.cs b/src/Elasticsearch.Net/Connection/RequestHandlers/RequestHandlerBase.cs index ac32cd6c7dd..d7ee770ea6d 100644 --- a/src/Elasticsearch.Net/Connection/RequestHandlers/RequestHandlerBase.cs +++ b/src/Elasticsearch.Net/Connection/RequestHandlers/RequestHandlerBase.cs @@ -56,17 +56,27 @@ protected byte[] PostData(object data) var s = data as string; if (s != null) return s.Utf8Bytes(); - var ss = data as IEnumerable; - if (ss != null) return (string.Join("\n", ss) + "\n").Utf8Bytes(); + var dataType = data.GetType(); + + if (typeof(IEnumerable).IsAssignableFrom(dataType)) + { + var ss = (IEnumerable)data; + return (string.Join("\n", ss) + "\n").Utf8Bytes(); + } + + if (typeof(IEnumerable).IsAssignableFrom(dataType)) + { + var so = (IEnumerable)data; + var joined = string.Join("\n", so + .Select(soo => this._serializer.Serialize(soo, SerializationFormatting.None).Utf8String())) + "\n"; + return joined.Utf8Bytes(); + } - var so = data as IEnumerable; var indent = this._settings.UsesPrettyRequests ? SerializationFormatting.Indented : SerializationFormatting.None; - if (so == null) return this._serializer.Serialize(data, indent); - var joined = string.Join("\n", so - .Select(soo => this._serializer.Serialize(soo, SerializationFormatting.None).Utf8String())) + "\n"; - return joined.Utf8Bytes(); + + return this._serializer.Serialize(data, indent); } protected static bool IsValidResponse(ITransportRequestState requestState, IElasticsearchResponse streamResponse)