Skip to content

Commit 8b418d0

Browse files
committed
Add MessagePackMemberAttribute.Name to customize keys of map. related to #38
1 parent 2935f1c commit 8b418d0

File tree

4 files changed

+38
-10
lines changed

4 files changed

+38
-10
lines changed

src/MsgPack/Serialization/DataMemberContract.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public DataMemberContract( MemberInfo member, MessagePackMemberAttribute attribu
160160
throw new SerializationException( String.Format( CultureInfo.CurrentCulture, "The member ID cannot be negative. The member is '{0}' in the '{1}' type.", member.Name, member.DeclaringType ) );
161161
}
162162

163-
this._name = member.Name;
163+
this._name = String.IsNullOrEmpty( attribute.Name ) ? member.Name : attribute.Name;
164164
this._nilImplication = attribute.NilImplication;
165165
this._id = attribute.Id;
166166
}

src/MsgPack/Serialization/MessagePackMemberAttribute.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,20 @@ public int Id
4848
get { return this._id; }
4949
}
5050

51+
private string _name;
52+
53+
/// <summary>
54+
/// Gets or sets the name of this member.
55+
/// </summary>
56+
/// <value>
57+
/// The name which will be used in map key on serialized MessagePack stream.
58+
/// </value>
59+
public string Name
60+
{
61+
get { return this._name; }
62+
set { this._name = value; }
63+
}
64+
5165
private NilImplication _nilImplication;
5266

5367
/// <summary>

test/MsgPack.UnitTest/Serialization/SerializationTargetTest.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ public void TestPlain()
7474
[Test]
7575
public void TestAnnotated()
7676
{
77-
TestCore<AnnotatedClass>(
78-
PublicProperty, NonPublicProperty, PublicField, NonPublicField,
77+
TestCore<AnnotatedClass>(
78+
PublicProperty, NonPublicProperty, PublicField, NonPublicField,
7979
#if !NETFX_CORE && !WINDOWS_PHONE
80-
NonSerializedPublicField, NonSerializedNonPublicField,
80+
NonSerializedPublicField, NonSerializedNonPublicField,
8181
#endif
82-
CollectionReadOnlyProperty );
82+
CollectionReadOnlyProperty );
8383
}
8484

8585
[Test]
@@ -89,15 +89,29 @@ public void TestDataMember()
8989
TestCore<DataMamberClass>(
9090
PublicProperty, NonPublicProperty, PublicField, NonPublicField,
9191
#if !NETFX_CORE && !WINDOWS_PHONE
92-
NonSerializedPublicField, NonSerializedNonPublicField,
92+
NonSerializedPublicField, NonSerializedNonPublicField,
9393
#endif
94-
CollectionReadOnlyProperty );
94+
CollectionReadOnlyProperty );
95+
}
96+
97+
[Test]
98+
public void TestAliasInMessagePackMember()
99+
{
100+
var target = SerializationTarget.GetTargetMembers( typeof( AnnotatedClass ) );
101+
Assert.That( target.Any( m => m.Contract.Name == "Alias" && m.Contract.Name != m.Member.Name ) );
102+
}
103+
104+
[Test]
105+
public void TestAliasInDataMember()
106+
{
107+
var target = SerializationTarget.GetTargetMembers( typeof( DataMamberClass ) );
108+
Assert.That( target.Any( m => m.Contract.Name == "Alias" && m.Contract.Name != m.Member.Name ) );
95109
}
96110

97111
private static void TestCore<T>( params string[] expectedMemberNames )
98112
{
99113
var expected = expectedMemberNames.OrderBy( n => n ).ToArray();
100-
var actual = SerializationTarget.GetTargetMembers( typeof( T ) ).OrderBy( m => m.Contract.Name ).Select( m => m.Contract.Name ).ToArray();
114+
var actual = SerializationTarget.GetTargetMembers( typeof( T ) ).OrderBy( m => m.Member.Name ).Select( m => m.Member.Name ).ToArray();
101115
Assert.That( actual, Is.EqualTo( expected ), String.Join( ", ", actual ) );
102116
}
103117

test/MsgPack.UnitTest/Serialization/SerializationTargets.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class AnnotatedClass
7979
{
8080
public static int StaticProperty { get; set; }
8181

82-
[MessagePackMember( 0 )]
82+
[MessagePackMember( 0, Name = "Alias" )]
8383
public int PublicProperty { get; set; }
8484
[MessagePackMember( 1 )]
8585
public int PublicField;
@@ -166,7 +166,7 @@ public class DataMamberClass
166166
{
167167
public static int StaticProperty { get; set; }
168168

169-
[DataMember( Order = 0 )]
169+
[DataMember( Order = 0, Name = "Alias" )]
170170
public int PublicProperty { get; set; }
171171
[DataMember( Order = 1 )]
172172
public int PublicField;

0 commit comments

Comments
 (0)