Skip to content

Commit e973642

Browse files
committed
fix serialization issue
1 parent 22da0ba commit e973642

File tree

5 files changed

+42
-35
lines changed

5 files changed

+42
-35
lines changed

src/Meilisearch/Converters/AlwaysIncludeEmptyObjectConverter.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,28 @@ namespace Meilisearch.Converters
88
{
99
/// <summary>
1010
/// Always include property in json. MultiSearchFederationOptions will be serialized as "{}"
11-
///
1211
/// </summary>
13-
/// <typeparam name="T"></typeparam>
1412
public class MultiSearchFederationOptionsConverter : JsonConverter<MultiSearchFederationOptions>
1513
{
14+
/// <summary>
15+
/// Would override the default read logic, but here we use the default
16+
/// </summary>
17+
/// <param name="reader"></param>
18+
/// <param name="typeToConvert"></param>
19+
/// <param name="options"></param>
20+
/// <returns></returns>
1621
public override MultiSearchFederationOptions Read(ref Utf8JsonReader reader, Type typeToConvert,
1722
JsonSerializerOptions options)
1823
{
1924
return JsonSerializer.Deserialize<MultiSearchFederationOptions>(ref reader, options);
2025
}
2126

27+
/// <summary>
28+
/// Write json for MultiSearchFederationOptions and include it always as empty object
29+
/// </summary>
30+
/// <param name="writer"></param>
31+
/// <param name="value"></param>
32+
/// <param name="options"></param>
2233
public override void Write(Utf8JsonWriter writer, MultiSearchFederationOptions value,
2334
JsonSerializerOptions options)
2435
{
@@ -28,20 +39,9 @@ public override void Write(Utf8JsonWriter writer, MultiSearchFederationOptions v
2839
}
2940
else
3041
{
31-
var sanitizedOptions =
32-
RemoveSelfFromSerializerOptions(options); //Prevents getting stuck in a loop during serialization
33-
JsonSerializer.Serialize(writer, value, sanitizedOptions);
42+
JsonSerializer.Serialize(writer, value);
3443
}
3544
}
36-
37-
private static JsonSerializerOptions RemoveSelfFromSerializerOptions(JsonSerializerOptions options)
38-
{
39-
var sanitizedOptions = new JsonSerializerOptions(options);
40-
sanitizedOptions.Converters.Remove(sanitizedOptions.Converters.First(c =>
41-
c.GetType() == typeof(MultiSearchFederationOptionsConverter)));
42-
return sanitizedOptions;
43-
}
44-
4545
private static void WriteEmptyObject(Utf8JsonWriter writer)
4646
{
4747
writer.WriteStartObject();
@@ -61,7 +61,6 @@ private bool HasAnyValueSet(MultiSearchFederationOptions value)
6161
return true;
6262
}
6363
}
64-
6564
return false;
6665
}
6766

src/Meilisearch/FederatedMultiSearchQuery.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ namespace Meilisearch
88
/// <summary>
99
/// Search query used in federated multi-index search
1010
/// </summary>
11-
[JsonConverter(typeof(MultiSearchFederationOptionsConverter))]
1211
public class FederatedMultiSearchQuery
1312
{
1413
/// <summary>

src/Meilisearch/MultiSearchFederationOptions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
using System.Text.Json;
2+
using System.Text.Json.Serialization;
3+
4+
using Meilisearch.Converters;
5+
16
namespace Meilisearch
27
{
38
/// <summary>
@@ -8,11 +13,13 @@ public class MultiSearchFederationOptions
813
/// <summary>
914
/// Number of documents to skip
1015
/// </summary>
16+
[JsonPropertyName("offset")]
1117
public int Offset { get; set; }
1218

1319
/// <summary>
1420
/// Maximum number of documents returned
1521
/// </summary>
22+
[JsonPropertyName("limit")]
1623
public int Limit { get; set; }
1724
}
1825
}

tests/Meilisearch.Tests/Meilisearch.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
<PropertyGroup>
44
<TargetFramework>net6.0</TargetFramework>
5-
65
<IsPackable>false</IsPackable>
76
</PropertyGroup>
87

tests/Meilisearch.Tests/MultiIndexSearchTests.cs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@ public async Task FederatedSearchWithNoFederationOptions()
8989
Queries = new List<FederatedSearchQuery>()
9090
{
9191
new FederatedSearchQuery() { IndexUid = _index1.Uid, Q = "", Filter = "genre = 'SF'" },
92-
new FederatedSearchQuery() { IndexUid = _index2.Uid, Q = "", Filter = "genre = 'Action'" }
92+
new FederatedSearchQuery()
93+
{
94+
IndexUid = _index2.Uid, Q = "", Filter = "genre = 'Action'"
95+
}
9396
},
9497
});
9598

@@ -105,11 +108,12 @@ public async Task FederatedSearchWithEmptyOptions()
105108
Queries = new List<FederatedSearchQuery>()
106109
{
107110
new FederatedSearchQuery() { IndexUid = _index1.Uid, Q = "", Filter = "genre = 'SF'" },
108-
new FederatedSearchQuery() { IndexUid = _index2.Uid, Q = "", Filter = "genre = 'Action'" }
111+
new FederatedSearchQuery()
112+
{
113+
IndexUid = _index2.Uid, Q = "", Filter = "genre = 'Action'"
114+
}
109115
},
110-
FederationOptions = new MultiSearchFederationOptions()
111-
{
112-
}
116+
FederationOptions = new MultiSearchFederationOptions() { }
113117
});
114118

115119
result.Hits.Should().HaveCount(4);
@@ -118,20 +122,19 @@ public async Task FederatedSearchWithEmptyOptions()
118122
[Fact]
119123
public async Task FederatedSearchWithLimitAndOffset()
120124
{
121-
var result = await _fixture.DefaultClient.FederatedMultiSearchAsync<Movie>(
122-
new FederatedMultiSearchQuery()
125+
var federatedquer = new FederatedMultiSearchQuery()
126+
{
127+
Queries = new List<FederatedSearchQuery>()
123128
{
124-
Queries = new List<FederatedSearchQuery>()
125-
{
126-
new FederatedSearchQuery() { IndexUid = _index1.Uid, Q = "", Filter = "genre = 'SF'" },
127-
new FederatedSearchQuery() { IndexUid = _index2.Uid, Q = "", Filter = "genre = 'Action'" }
128-
},
129-
FederationOptions = new MultiSearchFederationOptions()
130-
{
131-
Limit = 2,
132-
Offset = 0
133-
}
134-
});
129+
new FederatedSearchQuery() { IndexUid = _index1.Uid, Q = "", Filter = "genre = 'SF'" },
130+
new FederatedSearchQuery() { IndexUid = _index2.Uid, Q = "", Filter = "genre = 'Action'" }
131+
},
132+
FederationOptions = new MultiSearchFederationOptions() { Limit = 2, Offset = 0 }
133+
};
134+
var result = await _fixture.DefaultClient.FederatedMultiSearchAsync<Movie>(federatedquer
135+
);
136+
137+
var testJson = JsonSerializer.Serialize(federatedquer);
135138

136139
result.Hits.Should().HaveCount(2);
137140
}

0 commit comments

Comments
 (0)