-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve serialization #8448
Open
flobernd
wants to merge
9
commits into
main
Choose a base branch
from
serialization-refactor
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Improve serialization #8448
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5cf34c2
to
b5c10aa
Compare
b5c10aa
to
0a6739e
Compare
7b649db
to
2279176
Compare
2279176
to
55b8b2e
Compare
8aec674
to
d1c651e
Compare
db6b501
to
11180a9
Compare
11180a9
to
a651215
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
8.x
Relates to 8.x client version
Area: Client
Area: Generator
backport 8.x
backport 8.17
Category: Enhancement
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes:
JsonSerializer.{Serialize|Deserialize}
calls with direct converter access (JsonSerializerOptions.GetConverter
->converter.{Read|Write}
) to prevent frequent creation of top-level JSON reader stacks.ValueSpan
access instead of allocating intermediatestring
values (e.g. when comparing property names or parsing/formatting values).JsonEncodedText
constants for compile-time constant literals (e.g. property names).Utf8Parser
/Utf8Formatter
for primitive value conversions.SourceMarker<T>
should only (de-)serialize the wrapped type to prevent unnecessary allocations.IStreamSerializable
)IStreamSerializable
)SortOptions
special caseBreaking user facing changes:
Field.Format
property and corresponding constructor and inferrer overloads.This property was not used anymore for quite some time (got replaced by the
FieldAndFormat
type).Field
/Fields
static factory methods and conversion operators no longer return nullable references but throw exceptions instead (Field
) if the inputstring
/Expression
/PropertyInfo
argument isnull
.This especially makes implicit conversions to
Field
more easily usable without having to apply the null-forgiveness operator (!
) all the time.FieldValue.IsLazyDocument
,FieldValue.IsComposite
and the corresponding members in theFieldValue.ValueKind
enum. These values were not used anymore for quite some time.Non-breaking user facing changes:
index
,id
, ...) which previously could only be initialized from the constructor.Later/bonus:
ISelfTwoWaySerializable
(used for source-body/array/dictionary requests/responses).ISelfSerializable
(used for descriptors).ElasticsearchClient.SettingsTable
(used for descriptors and in some other places). Replace withContextProvider
access.IsADictionaryConverterFactory
with case-by-case converters.Related to:
All variants now have either a public
string Type
(internal, external, untyped) property or publicVariantType/Variant
properties (container). For non-exhaustive container variants like e.g.Aggregation
, these properties are settable.