-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathDefaultRequestResponseSerializer.cs
87 lines (77 loc) · 2.96 KB
/
DefaultRequestResponseSerializer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information.
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using Elastic.Clients.Elasticsearch.Aggregations;
using Elastic.Transport;
namespace Elastic.Clients.Elasticsearch.Serialization;
/// <summary>
/// The built in internal serializer that the high level client Elastic.Clients.Elasticsearch uses.
/// </summary>
internal class DefaultRequestResponseSerializer : SystemTextJsonSerializer
{
private readonly IElasticsearchClientSettings _settings;
public DefaultRequestResponseSerializer(IElasticsearchClientSettings settings)
{
Options = new JsonSerializerOptions
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
IncludeFields = true,
Converters =
{
new KeyValuePairConverterFactory(settings),
new SourceConverterFactory(settings),
new CalendarIntervalConverter(),
new IndexNameConverter(settings),
new ObjectToInferredTypesConverter(),
new IdConverter(settings),
new FieldConverter(settings),
new FieldValuesConverter(settings),
new LazyJsonConverter(settings),
new RelationNameConverter(settings),
new JoinFieldConverter(settings),
new CustomJsonWriterConverterFactory(settings),
new RoutingConverter(settings),
new SelfSerializableConverterFactory(settings),
new SelfDeserializableConverterFactory(settings),
new SelfTwoWaySerializableConverterFactory(settings),
new IndicesJsonConverter(settings),
new IdsConverter(settings),
new IsADictionaryConverterFactory(),
//new ResolvableReadonlyDictionaryConverterFactory(settings),
new ResponseItemConverterFactory(),
new UnionConverter(),
new ExtraSerializationData(settings),
new DictionaryResponseConverterFactory(settings)
},
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.AllowNamedFloatingPointLiterals
};
ElasticsearchClient.SettingsTable.Add(Options, settings);
_settings = settings;
}
public override void Serialize<T>(T data, Stream writableStream,
SerializationFormatting formatting = SerializationFormatting.None)
{
if (data is IStreamSerializable streamSerializable)
{
streamSerializable.Serialize(writableStream, _settings, formatting);
return;
}
base.Serialize(data, writableStream, formatting);
}
public override Task SerializeAsync<T>(T data, Stream stream,
SerializationFormatting formatting = SerializationFormatting.None,
CancellationToken cancellationToken = default)
{
if (data is IStreamSerializable streamSerializable)
{
return streamSerializable.SerializeAsync(stream, _settings, formatting);
}
return base.SerializeAsync(data, stream, formatting, cancellationToken);
}
}