Skip to content

Commit 1bf2fb7

Browse files
committed
fix #535 serialization of the term filter values hardwired to write value instead of serialize
1 parent aab5ad6 commit 1bf2fb7

File tree

3 files changed

+100
-7
lines changed

3 files changed

+100
-7
lines changed

Diff for: src/Nest/Resolvers/Converters/Filters/TermFilterConverter.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
3030

3131
writer.WriteStartObject();
3232
{
33-
WriteProperty(writer, f, field, f.Value);
34-
WriteProperty(writer, f, "boost", f.Boost);
35-
WriteProperty(writer, f, "_cache", f.Cache);
36-
WriteProperty(writer, f, "_cache_key", f.CacheKey);
37-
WriteProperty(writer, f, "_name", f.FilterName);
33+
WriteProperty(writer, serializer, field, f.Value);
34+
WriteProperty(writer, serializer, "boost", f.Boost);
35+
WriteProperty(writer, serializer, "_cache", f.Cache);
36+
WriteProperty(writer, serializer, "_cache_key", f.CacheKey);
37+
WriteProperty(writer, serializer, "_name", f.FilterName);
3838

3939
}
4040
writer.WriteEndObject();
4141
}
4242

43-
private static void WriteProperty(JsonWriter writer, IFilter filter, string field, object value)
43+
private static void WriteProperty(JsonWriter writer, JsonSerializer serializer, string field, object value)
4444
{
4545
if ((field.IsNullOrEmpty() || value == null))
4646
return;
4747
writer.WritePropertyName(field);
48-
writer.WriteValue(value);
48+
serializer.Serialize(writer, value);
4949
}
5050

5151
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.Reflection;
5+
using System.Runtime.Serialization;
6+
using FluentAssertions;
7+
using Newtonsoft.Json;
8+
using NUnit.Framework;
9+
using Nest.Tests.MockData.Domain;
10+
using Elasticsearch.Net;
11+
12+
namespace Nest.Tests.Unit.Internals.Serialize
13+
{
14+
[TestFixture]
15+
public class CustomConvertersTests : BaseJsonTests
16+
{
17+
private readonly ElasticClient _serializationClient;
18+
19+
public class MyObject
20+
{
21+
public MyEnum MyEnum { get; set; }
22+
public NestedObject Nested { get; set; }
23+
}
24+
public enum MyEnum
25+
{
26+
Foo = 0,
27+
Bar = 1
28+
}
29+
30+
public class NestedObject
31+
{
32+
public string Name { get; set; }
33+
}
34+
35+
public CustomConvertersTests()
36+
{
37+
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
38+
.SetDefaultIndex("nest_test_data")
39+
.AddContractJsonConverters(
40+
t => typeof(Enum).IsAssignableFrom(t) ? new Newtonsoft.Json.Converters.StringEnumConverter() : null,
41+
t => typeof(NestedObject).IsAssignableFrom(t) ? new CustomConverter() : null
42+
);
43+
44+
_serializationClient = new ElasticClient(settings);
45+
}
46+
47+
48+
[Test]
49+
public void ObjectSerializationTakesConvertersIntoAccount()
50+
{
51+
var o = new MyObject() { MyEnum = MyEnum.Foo, Nested = new NestedObject() };
52+
var serializedObject = _serializationClient.Serializer.Serialize(o).Utf8String();
53+
serializedObject.JsonEquals(@"
54+
{
55+
""myEnum"" : ""Foo"",
56+
""nested"" : ""something""
57+
}").Should().BeTrue();
58+
59+
}
60+
61+
[Test]
62+
public void StringificationTakesConvertersIntoAccount()
63+
{
64+
var query = new FilterDescriptor<MyObject>().Term(t => t.MyEnum, MyEnum.Foo);
65+
var serialized = _serializationClient.Serializer.Serialize(query).Utf8String();
66+
serialized.JsonEquals(@"
67+
{
68+
""term"" : {
69+
""myEnum"" : ""Foo""
70+
}
71+
}").Should().BeTrue();
72+
}
73+
74+
public class CustomConverter : JsonConverter
75+
{
76+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
77+
{
78+
writer.WriteValue("something");
79+
}
80+
81+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
82+
{
83+
return new NestedObject();
84+
}
85+
86+
public override bool CanConvert(Type objectType)
87+
{
88+
return true;
89+
}
90+
}
91+
}
92+
}

Diff for: src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@
235235
<Compile Include="Internals\Inferno\MapTypeNamesTests.cs" />
236236
<Compile Include="Internals\Serialize\ConnectionSettingsTests.cs" />
237237
<Compile Include="Internals\Serialize\OptOutTests.cs" />
238+
<Compile Include="Internals\Serialize\CustomConvertersTests.cs" />
238239
<Compile Include="ObjectInitializer\Aliases\GetAliasMoreUrlTests.cs" />
239240
<Compile Include="ObjectInitializer\Aliases\GetAliasesMoreUrlTests.cs" />
240241
<Compile Include="ObjectInitializer\Aliases\GetAliasRequestTests.cs" />

0 commit comments

Comments
 (0)