public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var request = value as IMultiPercolateRequest; if (request == null) { return; } var settings = serializer.GetConnectionSettings(); var elasticsearchSerializer = settings.Serializer; if (elasticsearchSerializer == null) { return; } foreach (var percolation in request.Percolations) { var requestParameters = percolation.GetRequestParameters() ?? new PercolateRequestParameters(); var header = new PercolateHeader { percolate_index = requestParameters.GetQueryStringValue <string>("percolate_index"), percolate_type = requestParameters.GetQueryStringValue <string>("percolate_type"), routing = requestParameters.GetQueryStringValue <string[]>("routing"), preference = requestParameters.GetQueryStringValue <string>("preference"), percolate_routing = requestParameters.GetQueryStringValue <string>("percolate_routing"), percolate_preference = requestParameters.GetQueryStringValue <string>("percolate_preference"), version = requestParameters.GetQueryStringValue <long?>("version") }; var routeValues = (percolation as IRequest)?.RouteValues; if (routeValues != null) { header.id = routeValues.Get <Id>("id"); header.index = routeValues.Get <IndexName>("index"); header.type = routeValues.Get <TypeName>("type"); if (request.Index != null && request.Index.EqualsMarker(header.index)) { header.index = null; } if (request.Type != null && request.Type.EqualsMarker(header.type)) { header.type = null; } } var headerBytes = elasticsearchSerializer.SerializeToBytes(header, SerializationFormatting.None); writer.WriteRaw($"{{\"{percolation.MultiPercolateName}\":" + headerBytes.Utf8String() + "}\n"); if (percolation == null) { writer.WriteRaw("{}\n"); } else { var bodyBytes = elasticsearchSerializer.SerializeToBytes(percolation, SerializationFormatting.None); writer.WriteRaw(bodyBytes.Utf8String() + "\n"); } } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var request = value as IMultiPercolateRequest; if (request == null) return; if (request.Percolations == null) return; var settings = serializer.GetConnectionSettings(); var elasticsearchSerializer = settings.Serializer; if (elasticsearchSerializer == null) return; foreach (var percolation in request.Percolations) { var requestParameters = percolation.GetRequestParameters() ?? new PercolateRequestParameters(); var header = new PercolateHeader { percolate_index = requestParameters.GetQueryStringValue<string>("percolate_index"), percolate_type = requestParameters.GetQueryStringValue<string>("percolate_type"), routing = requestParameters.GetQueryStringValue<string[]>("routing"), preference = requestParameters.GetQueryStringValue<string>("preference"), percolate_routing = requestParameters.GetQueryStringValue<string>("percolate_routing"), percolate_preference = requestParameters.GetQueryStringValue<string>("percolate_preference"), version = requestParameters.GetQueryStringValue<long?>("version") }; var routeValues = (percolation as IRequest)?.RouteValues; if (routeValues != null) { header.id = routeValues.Get<Id>("id"); header.index = routeValues.Get<IndexName>("index"); header.type = routeValues.Get<TypeName>("type"); if (request.Index != null && request.Index.EqualsMarker(header.index)) header.index = null; if (request.Type != null && request.Type.EqualsMarker(header.type)) header.type = null; } var headerBytes = elasticsearchSerializer.SerializeToBytes(header, SerializationFormatting.None); writer.WriteRaw($"{{\"{percolation.MultiPercolateName}\":" + headerBytes.Utf8String() + "}\n"); if (percolation == null) { writer.WriteRaw("{}\n"); } else { var bodyBytes = elasticsearchSerializer.SerializeToBytes(percolation, SerializationFormatting.None); writer.WriteRaw(bodyBytes.Utf8String() + "\n"); } } }
public string SerializeMultiPercolate(IMultiPercolateRequest multiPercolateRequest) { multiPercolateRequest.ThrowIfNull("multiPercolateRequest"); multiPercolateRequest.Percolations.ThrowIfEmpty("multiPercolateRequest does not define any percolations"); var sb = new StringBuilder(); foreach (var p in multiPercolateRequest.Percolations) { var operation = "percolate"; object body = p; var op = new PercolateHeader(); var countParams = p.GetRequestParameters() ?? new PercolateCountRequestParameters(); op.percolate_index = countParams.GetQueryStringValue <string>("percolate_index"); op.percolate_type = countParams.GetQueryStringValue <string>("percolate_type"); op.routing = countParams.GetQueryStringValue <string[]>("routing"); op.preference = countParams.GetQueryStringValue <string>("preference"); op.percolate_routing = countParams.GetQueryStringValue <string>("percolate_routing"); op.percolate_preference = countParams.GetQueryStringValue <string>("percolate_preference"); op.version = countParams.GetQueryStringValue <long?>("version"); var count = p as IIndexTypePath <PercolateCountRequestParameters>; var percolate = p as IIndexTypePath <PercolateRequestParameters>; if (count != null) { operation = "count"; if (multiPercolateRequest.Index != null && multiPercolateRequest.Index.EqualsMarker(count.Index)) { count.Index = null; } op.index = count.Index; op.type = count.Type; op.id = p.Id; } else if (percolate != null) { if (multiPercolateRequest.Index != null && multiPercolateRequest.Index.EqualsMarker(percolate.Index)) { percolate.Index = null; } op.index = percolate.Index; op.type = percolate.Type; op.id = p.Id; } else { continue; } var opJson = this.Serialize(op, SerializationFormatting.None).Utf8String(); var action = "{{\"{0}\":{1}}}\n".F(operation, opJson); sb.Append(action); if (body == null) { sb.Append("{}\n"); continue; } var jsonCommand = this.Serialize(body, SerializationFormatting.None).Utf8String(); sb.Append(jsonCommand + "\n"); } return(sb.ToString()); }