Skip to content

Commit a3cf069

Browse files
committed
Add reflection serializers which try to unpack collections with reflection based Add method invocation.
1 parent b1147e0 commit a3cf069

16 files changed

Lines changed: 428 additions & 17 deletions

src/MsgPack.Net35/MsgPack.Net35.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,12 +674,21 @@
674674
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
675675
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
676676
</Compile>
677+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
678+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
679+
</Compile>
677680
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
678681
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
679682
</Compile>
680683
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
681684
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
682685
</Compile>
686+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
687+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
688+
</Compile>
689+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
690+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
691+
</Compile>
683692
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
684693
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
685694
</Compile>

src/MsgPack.Net40/MsgPack.Net40.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,12 +688,21 @@
688688
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
689689
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
690690
</Compile>
691+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
692+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
693+
</Compile>
691694
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
692695
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
693696
</Compile>
694697
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
695698
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
696699
</Compile>
700+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
701+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
702+
</Compile>
703+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
704+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
705+
</Compile>
697706
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
698707
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
699708
</Compile>

src/MsgPack.Silverlight.5/MsgPack.Silverlight.5.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,12 +679,21 @@
679679
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
680680
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
681681
</Compile>
682+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
683+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
684+
</Compile>
682685
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
683686
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
684687
</Compile>
685688
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
686689
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
687690
</Compile>
691+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
692+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
693+
</Compile>
694+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
695+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
696+
</Compile>
688697
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
689698
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
690699
</Compile>

src/MsgPack.Silverlight.WindowsPhone/MsgPack.Silverlight.WindowsPhone.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,12 +634,21 @@
634634
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
635635
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
636636
</Compile>
637+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
638+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
639+
</Compile>
637640
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
638641
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
639642
</Compile>
640643
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
641644
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
642645
</Compile>
646+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
647+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
648+
</Compile>
649+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
650+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
651+
</Compile>
643652
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
644653
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
645654
</Compile>

src/MsgPack.Unity3D/MsgPack.Unity3D.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,12 +465,21 @@
465465
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
466466
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
467467
</Compile>
468+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
469+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
470+
</Compile>
468471
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
469472
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
470473
</Compile>
471474
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
472475
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
473476
</Compile>
477+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
478+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
479+
</Compile>
480+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
481+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
482+
</Compile>
474483
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
475484
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
476485
</Compile>

src/MsgPack.WinRT.Portable/MsgPack.WinRT.Portable.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,12 +577,21 @@
577577
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
578578
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
579579
</Compile>
580+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
581+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
582+
</Compile>
580583
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
581584
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
582585
</Compile>
583586
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
584587
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
585588
</Compile>
589+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
590+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
591+
</Compile>
592+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
593+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
594+
</Compile>
586595
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
587596
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
588597
</Compile>

src/MsgPack.Xamarin.Android/MsgPack.Xamarin.Android.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,12 +457,21 @@
457457
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
458458
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
459459
</Compile>
460+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
461+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
462+
</Compile>
460463
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
461464
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
462465
</Compile>
463466
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
464467
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
465468
</Compile>
469+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
470+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
471+
</Compile>
472+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
473+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
474+
</Compile>
466475
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
467476
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
468477
</Compile>

src/MsgPack.Xamarin.iOS/MsgPack.Xamarin.iOS.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,12 +461,21 @@
461461
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs">
462462
<Link>Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs</Link>
463463
</Compile>
464+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs">
465+
<Link>Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs</Link>
466+
</Compile>
464467
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs">
465468
<Link>Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs</Link>
466469
</Compile>
467470
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs">
468471
<Link>Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs</Link>
469472
</Compile>
473+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs">
474+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs</Link>
475+
</Compile>
476+
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs">
477+
<Link>Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs</Link>
478+
</Compile>
470479
<Compile Include="..\MsgPack\Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs">
471480
<Link>Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs</Link>
472481
</Compile>

src/MsgPack/MsgPack.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
<Compile Include="Serialization\BoxedEnumMemberSerializationMethod.cs" />
168168
<Compile Include="Serialization\CollectionDetailedKind.cs" />
169169
<Compile Include="Serialization\CollectionSerializers\NonGenericDictionaryMessagePackSerializer`1.cs" />
170+
<Compile Include="Serialization\CollectionSerializers\NonGenericEnumerableMessagePackSerializer`1.cs" />
170171
<Compile Include="Serialization\CollectionSerializers\NonGenericListMessagePackSerializer`1.cs" />
171172
<Compile Include="Serialization\CollectionSerializers\NonGenericCollectionMessagePackSerializer`1.cs" />
172173
<Compile Include="Serialization\CollectionSerializers\CollectionMessagePackSerializer`2.cs" />
@@ -209,10 +210,13 @@
209210
<Compile Include="Serialization\PolymorphismSchemaChildrenType.cs" />
210211
<Compile Include="Serialization\PolymorphismTarget.cs" />
211212
<Compile Include="Serialization\PolymorphismType.cs" />
213+
<Compile Include="Serialization\ReflectionSerializers\ReflectionEnumerableMessagePackSerializer`2.cs" />
212214
<Compile Include="Serialization\ReflectionSerializers\ReflectionCollectionMessagePackSerializer`2.cs" />
213215
<Compile Include="Serialization\ReflectionSerializers\ReflectionDictionaryMessagePackSerializer`3.cs" />
214216
<Compile Include="Serialization\ReflectionSerializers\ReflectionNilImplicationHandler.cs" />
215217
<Compile Include="Serialization\ReflectionSerializers\ReflectionEnumMessagePackSerializer`1.cs" />
218+
<Compile Include="Serialization\ReflectionSerializers\ReflectionNonGeenricCollectionMessagePackSerializer`1.cs" />
219+
<Compile Include="Serialization\ReflectionSerializers\ReflectionNonGeenricEnumerableMessagePackSerializer`1.cs" />
216220
<Compile Include="Serialization\ReflectionSerializers\ReflectionNonGenericDictionaryMessagePackSerializer`1.cs" />
217221
<Compile Include="Serialization\ReflectionSerializers\ReflectionNonGenericListMessagePackSerializer`1.cs" />
218222
<Compile Include="Serialization\ReflectionSerializers\ReflectionSerializerHelper.cs" />
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#region -- License Terms --
2+
//
3+
// MessagePack for CLI
4+
//
5+
// Copyright (C) 2015 FUJIWARA, Yusuke
6+
//
7+
// Licensed under the Apache License, Version 2.0 (the "License");
8+
// you may not use this file except in compliance with the License.
9+
// You may obtain a copy of the License at
10+
//
11+
// http://www.apache.org/licenses/LICENSE-2.0
12+
//
13+
// Unless required by applicable law or agreed to in writing, software
14+
// distributed under the License is distributed on an "AS IS" BASIS,
15+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
// See the License for the specific language governing permissions and
17+
// limitations under the License.
18+
//
19+
#endregion -- License Terms --
20+
21+
using System;
22+
using System.Collections;
23+
using System.Linq;
24+
using System.Runtime.Serialization;
25+
26+
namespace MsgPack.Serialization.CollectionSerializers
27+
{
28+
/// <summary>
29+
/// Provides common implementation of <see cref="NonGenericEnumerableMessagePackSerializerBase{TCollection}"/>
30+
/// for collection types which implement <see cref="IEnumerable"/>.
31+
/// </summary>
32+
/// <typeparam name="TCollection">The type of the collection.</typeparam>
33+
public abstract class NonGenericEnumerableMessagePackSerializer<TCollection> : NonGenericEnumerableMessagePackSerializerBase<TCollection>
34+
where TCollection : IEnumerable
35+
{
36+
/// <summary>
37+
/// Initializes a new instance of the <see cref="NonGenericCollectionMessagePackSerializer{TCollection}"/> class.
38+
/// </summary>
39+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
40+
/// <param name="schema">
41+
/// The schema for collection itself or its items for the member this instance will be used to.
42+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
43+
/// </param>
44+
/// <exception cref="ArgumentNullException">
45+
/// <paramref name="ownerContext"/> is <c>null</c>.
46+
/// </exception>
47+
protected NonGenericEnumerableMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema )
48+
: base( ownerContext, schema ) { }
49+
50+
/// <summary>
51+
/// Serializes specified object with specified <see cref="Packer"/>.
52+
/// </summary>
53+
/// <param name="packer"><see cref="Packer"/> which packs values in <paramref name="objectTree"/>. This value will not be <c>null</c>.</param>
54+
/// <param name="objectTree">Object to be serialized.</param>
55+
/// <exception cref="SerializationException">
56+
/// <typeparamref name="TCollection"/> is not serializable etc.
57+
/// </exception>
58+
protected internal sealed override void PackToCore( Packer packer, TCollection objectTree )
59+
{
60+
ICollection asICollection;
61+
if ( ( asICollection = objectTree as ICollection ) == null )
62+
{
63+
asICollection = objectTree.Cast<object>().ToArray();
64+
}
65+
66+
packer.PackArrayHeader( asICollection.Count );
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)