Skip to content
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

Stop initializing members to their default values when deserializing where no data was provided for that member #1095

Merged
merged 2 commits into from Nov 11, 2020

Conversation

pCYSl5EDgo
Copy link
Contributor

@pCYSl5EDgo pCYSl5EDgo commented Oct 27, 2020

Background

// Psuedo code.
[MessagePackObject(true)]
public class X
{
    public string Prop1 { get; set; } = "Uninitialized";
    public string Prop2 { get; set; } = "Uninitialized";
}

The old MessagePack-CSharp deserialize input { "Prop1": "Set" } as { "Prop1": "Set", "Prop2": null }.
It sets default value when the corresponging properties do not show in the input byte[].

This behaviour is undocumented and undesirable.
There are 2 draft PRs.

Fixes #1085

…rp#1092

commit d7a50b9
Merge: 02ae418 5a6cda6
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 09:33:45 2020 +0900

    Merge remote-tracking branch 'upstream/develop' into solution#1085-mpc

commit 02ae418
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 09:25:20 2020 +0900

    Update: Loop demonstration

commit d84ae75
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 09:24:31 2020 +0900

    Change: drop deserialized value -> reader.Skip()

commit 9b0d4a2
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 00:27:10 2020 +0900

    Fix: remove unused boolean local variables

commit fdfabeb
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 00:00:28 2020 +0900

    Update: Make the same as Dynamic

commit bef4692
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 19:37:11 2020 +0900

    Add test project

commit a8fac80
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 18:55:27 2020 +0900

    Add types to sandbox

commit 6ffc3c3
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 18:45:40 2020 +0900

    Update: string-key mpc.exe

commit 44819e6
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 18:05:24 2020 +0900

    Update: int-key mpc.exe

commit 0a2fef4
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 12:12:57 2020 +0900

    Fix: var -> global::MessagePack.IFormatterResolver

commit 086aa11
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 12:05:21 2020 +0900

    Fix: Line Feed

commit 39d3d08
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 12:03:37 2020 +0900

    Fix: space

commit c57f423
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 12:00:32 2020 +0900

    Change: var to globall::
    Revert: DepthStep position
    Revert: }#> -> } #>

commit de6fd23
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sat Oct 24 11:04:44 2020 +0900

     fix CRLF

commit 4b6ae7c
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sat Oct 24 10:59:50 2020 +0900

    Change the format to decrease template part lines.

    Change the iterator `i` type from `int` to `var`.

commit 95f41ad
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Fri Oct 23 21:03:54 2020 +0900

    This is a cherry-pick of MessagePack-CSharp#1074.
    This is a refactoring of int-key mpc.exe tt file.
…rp#1091

commit 5fbf110
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 18:12:45 2020 +0900

    make BuildDeserialize easy to understand

commit 292badc
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 13:47:48 2020 +0900

    Update: Rename LocalField -> LocalVariable

commit 007e338
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 13:12:38 2020 +0900

    Add test code for setter call after explicit constructor

commit 5181801
Merge: 5948fc0 5a6cda6
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Mon Oct 26 12:59:36 2020 +0900

    Merge branch 'develop' of https://github.com/neuecc/MessagePack-CSharp into solution#1085-Dynamic

commit 5948fc0
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 21:18:12 2020 +0900

    Add tests

commit 96aaa6a
Author: pCYSl5EDgo <pCYSl5EDgo@yahoo.co.jp>
Date:   Sun Oct 25 20:25:44 2020 +0900

    Update: DynamicObjectResolver
@pCYSl5EDgo pCYSl5EDgo changed the base branch from master to develop October 27, 2020 11:52
@AArnott AArnott added this to the v2.3 milestone Oct 30, 2020
@AArnott AArnott changed the title Solution for Issue #1085 "Appropriate field/property deserialization" Stop initializing members to their default values when deserializing where no data was provided for that member Oct 30, 2020
Copy link
Collaborator

@AArnott AArnott left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!
This looks like it must have been a big job to develop. I think it's a good change.

@AArnott AArnott requested a review from neuecc October 30, 2020 20:26
@neuecc
Copy link
Member

neuecc commented Oct 31, 2020

wait a moment, I'll comment it.
maybe this PR needs discussions.

Copy link
Member

@neuecc neuecc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for delayed response.
I've checked and this is well optimize to minimize use of flag.
Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Use contractless resolver without setting default values for missing properties
3 participants