msgpack-cli icon indicating copy to clipboard operation
msgpack-cli copied to clipboard

Serialization field order by declaration order

Open WongKit opened this issue 2 years ago • 3 comments

Hi,

is it possible to optionally let MsgPack sort the serialized data by the original declaration order instead of the alphabetical one? I am working in a project, where the original field names are scrambled by an obfuscator. Using the MessagePackMember attribute would only be the very last resort due to the huge amount of serialized classes to be changed manually.

According to StackOverflow, the MetadataToken property might be used for sorting. https://stackoverflow.com/a/8067702

WongKit avatar Jun 05 '23 04:06 WongKit

Sorry, I missed this post for a long time.

Use [MessagePackMember(Id)] where Id is continuous, zero-based integers.

// This should be serialized to ["A", 1] instead of [1, "A"]
public class Foo
{
    [MessagePackMember(0)]
    public string StringProperty { get; set; } = "A";

    [MessagePackMember(1)]
    public int IntegerProperty { get; set; } = 1;
}

yfakariya avatar Apr 14 '24 11:04 yfakariya

No problem! Is there any other way? As I wrote above, I am already aware of the MessagePackMember attribute 😉

WongKit avatar Apr 14 '24 12:04 WongKit

Oh, I panicked for delayed response. I understand that your post sugested to change default behavior more handy. Usage of metadata token looks good starting point, but it introduces breaking changes. So, I will implement it when I restart work on wip/v2 branch or more "mild" v2 drop.

Thank you :)

yfakariya avatar Apr 15 '24 10:04 yfakariya