-
-
Notifications
You must be signed in to change notification settings - Fork 6.4k
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
Conditionally apply serialization on certain properties #9807
Conditionally apply serialization on certain properties #9807
Conversation
cc @mandrean (2017/08) @frankyjuang (2019/09) @shibayan (2020/02) @Blackclaws (2021/03) @lucamazzanti (2021/05) |
Removed some trailing spaces and updated the samples via 14cc482 |
CI failures not related to this change. |
Thanks for the feature @Ghufz. I was excited to see this because I have a similar issue to resolve. Unfortunately this doesn't cover my use case. I am making heavy use of model construction via ctors, and the ctors don't write to the properties. So after I enabled this option, none of my properties get serialized. Do you have any thoughts about this from the work you put in? If the parameterless ctor was public I could initialize the models with object initializers, but that might break some of the IsRequired checking. |
ConditionalSerialization is exposed as flag when it sets to true it generates the shouldSerialize() method for each property along with flag which detect that property has been changes or set, if the property has been changed then the flag is set to true and ShouldSerialize return true, which allows the serialization that configured property in request body.
-This gives a control to the user to decide what are the properties can be set in request body irrespective of sending all the other property which user does not configured.
We face the issue mostly in the case of update the MO, where user wants to configure only one property but in the request all the nulllable properties set to null. which leads to inconsistency.
-This solved another use case where user is using the latest SDK which has newly added property to the existing object and the server side is not updated(working with older openAPIDoc). When user tries to send the request to the server the newly added property also become a part of request body which server does not know abut it, it leads to exception. ConditionalSerialization will not include those newly added property unless and until it is being configured by the user.
Here is the example :-
Let say we have Name object which has two properties FirstName and LastName
when user wants to create new Name object the request would be like
once above object is created let say user wants to update only "LastName" so the payload as per the deafult Csharp SDK would be
When the above request sents to the server, it updates the firstName as null along with LastName which leads to inconsistency.
when we generate the C# SDK using the conditionalSerialization flag the above request cant be sent like below
the above request sends only those property which user has configured.
Note :- there is no change in default code generation.
PR checklist
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*
.For Windows users, please run the script in Git BASH.
master
,5.1.x
,6.0.x
@wing328