Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/aspnet/MessagePack-CSharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorneuecc <ils@neue.cc>2017-05-24 08:47:52 +0300
committerneuecc <ils@neue.cc>2017-05-24 08:47:52 +0300
commit51952eee888f3b57b8420502d421e2d98dcb80ce (patch)
treef1a59eaa35d8e2d1f07c5ab18602dabe2bdd77eb
parent129776eb8117865cc86f11bb87a6e22b98965cdf (diff)
fix Mpc(generate invalid code when type is in global namespace, union key is not sequential from zero)v1.2.3
-rw-r--r--nuget/MessagePack.AspNetCoreMvcFormatter.nuspec4
-rw-r--r--nuget/MessagePack.ImmutableCollection.nuspec8
-rw-r--r--nuget/MessagePack.ReactiveProperty.nuspec8
-rw-r--r--nuget/MessagePack.UnityShims.nuspec8
-rw-r--r--nuget/MessagePack.nuspec2
-rw-r--r--nuget/push.bat10
-rw-r--r--sandbox/Sandbox/Generated.cs943
-rw-r--r--sandbox/Sandbox/Program.cs43
-rw-r--r--sandbox/SharedData/Class1.cs76
-rw-r--r--sandbox/SharedData/SharedData.csproj14
-rw-r--r--sandbox/SharedData/packages.config6
-rw-r--r--src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs6
-rw-r--r--src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs2
-rw-r--r--src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt2
-rw-r--r--src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs17
-rw-r--r--src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt5
-rw-r--r--src/MessagePack.CodeGenerator/Program.cs6
-rw-r--r--tests/MessagePack.Tests/UnionResolverTest.cs18
18 files changed, 1051 insertions, 127 deletions
diff --git a/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec b/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec
index f717f9ed..075dd8c1 100644
--- a/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec
+++ b/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MessagePack.AspNetCoreMvcFormatter</id>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<title>ASP.NET Core MVC Input/Output MessagePack formatter</title>
<authors>neuecc</authors>
<owners>neuecc</owners>
@@ -13,7 +13,7 @@
<tags>MsgPack, MessagePack, Serialization, Formatter, Serializer, aspnetcore, aspnetcoremvc</tags>
<dependencies>
<group targetFramework=".NETStandard1.4">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="Microsoft.AspNetCore.Mvc.Abstractions" version="1.2.0" />
</group>
</dependencies>
diff --git a/nuget/MessagePack.ImmutableCollection.nuspec b/nuget/MessagePack.ImmutableCollection.nuspec
index 2889f375..2342d4e4 100644
--- a/nuget/MessagePack.ImmutableCollection.nuspec
+++ b/nuget/MessagePack.ImmutableCollection.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MessagePack.ImmutableCollection</id>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<title>MessagePack for C# Extension Support for ImmutableCollection</title>
<authors>neuecc</authors>
<owners>neuecc</owners>
@@ -17,15 +17,15 @@
</frameworkAssemblies>
<dependencies>
<group targetFramework=".NETFramework4.7">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="System.Collections.Immutable" version="1.3.1" />
</group>
<group targetFramework=".NETFramework4.5">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="System.Collections.Immutable" version="1.3.1" />
</group>
<group targetFramework=".NETStandard1.4">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="System.Collections.Immutable" version="1.3.1" />
</group>
</dependencies>
diff --git a/nuget/MessagePack.ReactiveProperty.nuspec b/nuget/MessagePack.ReactiveProperty.nuspec
index 024f85db..f5ddb42e 100644
--- a/nuget/MessagePack.ReactiveProperty.nuspec
+++ b/nuget/MessagePack.ReactiveProperty.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MessagePack.ReactiveProperty</id>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<title>MessagePack for C# Extension Support for ReactiveProperty</title>
<authors>neuecc</authors>
<owners>neuecc</owners>
@@ -17,15 +17,15 @@
</frameworkAssemblies>
<dependencies>
<group targetFramework=".NETFramework4.7">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="ReactiveProperty" version="3.5.1" />
</group>
<group targetFramework=".NETFramework4.5">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="ReactiveProperty" version="3.5.1" />
</group>
<group targetFramework=".NETStandard1.4">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
<dependency id="ReactiveProperty" version="3.5.1" />
</group>
</dependencies>
diff --git a/nuget/MessagePack.UnityShims.nuspec b/nuget/MessagePack.UnityShims.nuspec
index ddb82d40..bcbc3fb1 100644
--- a/nuget/MessagePack.UnityShims.nuspec
+++ b/nuget/MessagePack.UnityShims.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MessagePack.UnityShims</id>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<title>MessagePack for C# Extension Support for Unity(add pseudo Vector type and fast Vectory[] extension formatter)</title>
<authors>neuecc</authors>
<owners>neuecc</owners>
@@ -17,13 +17,13 @@
</frameworkAssemblies>
<dependencies>
<group targetFramework=".NETFramework4.7">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
</group>
<group targetFramework=".NETFramework4.5">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
</group>
<group targetFramework=".NETStandard1.4">
- <dependency id="MessagePack" version="1.2.2" />
+ <dependency id="MessagePack" version="1.2.3" />
</group>
</dependencies>
</metadata>
diff --git a/nuget/MessagePack.nuspec b/nuget/MessagePack.nuspec
index b41282c2..141ead1d 100644
--- a/nuget/MessagePack.nuspec
+++ b/nuget/MessagePack.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MessagePack</id>
- <version>1.2.2</version>
+ <version>1.2.3</version>
<title>MessagePack for C#</title>
<authors>neuecc</authors>
<owners>neuecc</owners>
diff --git a/nuget/push.bat b/nuget/push.bat
index b6a95a5b..afafe812 100644
--- a/nuget/push.bat
+++ b/nuget/push.bat
@@ -1,6 +1,6 @@
-nuget push MessagePack.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package
-nuget push MessagePack.ImmutableCollection.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package
-nuget push MessagePack.ReactiveProperty.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package
-nuget push MessagePack.UnityShims.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package
-nuget push MessagePack.AspNetCoreMvcFormatter.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package
+nuget push MessagePack.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package
+nuget push MessagePack.ImmutableCollection.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package
+nuget push MessagePack.ReactiveProperty.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package
+nuget push MessagePack.UnityShims.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package
+nuget push MessagePack.AspNetCoreMvcFormatter.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package
REM nuget push MessagePackAnalyzer.1.6.0.nupkg -Source https://www.nuget.org/api/v2/package \ No newline at end of file
diff --git a/sandbox/Sandbox/Generated.cs b/sandbox/Sandbox/Generated.cs
index 6fbeb940..a4c70c8b 100644
--- a/sandbox/Sandbox/Generated.cs
+++ b/sandbox/Sandbox/Generated.cs
@@ -43,45 +43,56 @@ namespace MessagePack.Resolvers
static GeneratedResolverGetFormatterHelper()
{
- lookup = new global::System.Collections.Generic.Dictionary<Type, int>(37)
+ lookup = new global::System.Collections.Generic.Dictionary<Type, int>(48)
{
{typeof(global::SharedData.ByteEnum), 0 },
{typeof(global::SharedData.IUnionChecker), 1 },
{typeof(global::SharedData.IUnionChecker2), 2 },
{typeof(global::SharedData.IIVersioningUnion), 3 },
- {typeof(global::SharedData.FirstSimpleData), 4 },
- {typeof(global::SharedData.SimlpeStringKeyData), 5 },
- {typeof(global::SharedData.SimpleStructIntKeyData), 6 },
- {typeof(global::SharedData.SimpleStructStringKeyData), 7 },
- {typeof(global::SharedData.SimpleIntKeyData), 8 },
- {typeof(global::SharedData.Vector2), 9 },
- {typeof(global::SharedData.EmptyClass), 10 },
- {typeof(global::SharedData.EmptyStruct), 11 },
- {typeof(global::SharedData.Version1), 12 },
- {typeof(global::SharedData.Version2), 13 },
- {typeof(global::SharedData.Version0), 14 },
- {typeof(global::SharedData.HolderV1), 15 },
- {typeof(global::SharedData.HolderV2), 16 },
- {typeof(global::SharedData.HolderV0), 17 },
- {typeof(global::SharedData.Callback1), 18 },
- {typeof(global::SharedData.Callback1_2), 19 },
- {typeof(global::SharedData.Callback2), 20 },
- {typeof(global::SharedData.Callback2_2), 21 },
- {typeof(global::SharedData.MySubUnion1), 22 },
- {typeof(global::SharedData.MySubUnion2), 23 },
- {typeof(global::SharedData.MySubUnion3), 24 },
- {typeof(global::SharedData.MySubUnion4), 25 },
- {typeof(global::SharedData.VersioningUnion), 26 },
- {typeof(global::SharedData.MyClass), 27 },
- {typeof(global::SharedData.VersionBlockTest), 28 },
- {typeof(global::SharedData.UnVersionBlockTest), 29 },
- {typeof(global::SharedData.Empty1), 30 },
- {typeof(global::SharedData.Empty2), 31 },
- {typeof(global::SharedData.NonEmpty1), 32 },
- {typeof(global::SharedData.NonEmpty2), 33 },
- {typeof(global::SharedData.VectorLike2), 34 },
- {typeof(global::SharedData.Vector3Like), 35 },
- {typeof(global::SharedData.ArrayOptimizeClass), 36 },
+ {typeof(global::SharedData.IUnionSample), 4 },
+ {typeof(global::IMessageBody), 5 },
+ {typeof(global::SharedData.FirstSimpleData), 6 },
+ {typeof(global::SharedData.SimlpeStringKeyData), 7 },
+ {typeof(global::SharedData.SimpleStructIntKeyData), 8 },
+ {typeof(global::SharedData.SimpleStructStringKeyData), 9 },
+ {typeof(global::SharedData.SimpleIntKeyData), 10 },
+ {typeof(global::SharedData.Vector2), 11 },
+ {typeof(global::SharedData.EmptyClass), 12 },
+ {typeof(global::SharedData.EmptyStruct), 13 },
+ {typeof(global::SharedData.Version1), 14 },
+ {typeof(global::SharedData.Version2), 15 },
+ {typeof(global::SharedData.Version0), 16 },
+ {typeof(global::SharedData.HolderV1), 17 },
+ {typeof(global::SharedData.HolderV2), 18 },
+ {typeof(global::SharedData.HolderV0), 19 },
+ {typeof(global::SharedData.Callback1), 20 },
+ {typeof(global::SharedData.Callback1_2), 21 },
+ {typeof(global::SharedData.Callback2), 22 },
+ {typeof(global::SharedData.Callback2_2), 23 },
+ {typeof(global::SharedData.MySubUnion1), 24 },
+ {typeof(global::SharedData.MySubUnion2), 25 },
+ {typeof(global::SharedData.MySubUnion3), 26 },
+ {typeof(global::SharedData.MySubUnion4), 27 },
+ {typeof(global::SharedData.VersioningUnion), 28 },
+ {typeof(global::SharedData.MyClass), 29 },
+ {typeof(global::SharedData.VersionBlockTest), 30 },
+ {typeof(global::SharedData.UnVersionBlockTest), 31 },
+ {typeof(global::SharedData.Empty1), 32 },
+ {typeof(global::SharedData.Empty2), 33 },
+ {typeof(global::SharedData.NonEmpty1), 34 },
+ {typeof(global::SharedData.NonEmpty2), 35 },
+ {typeof(global::SharedData.VectorLike2), 36 },
+ {typeof(global::SharedData.Vector3Like), 37 },
+ {typeof(global::SharedData.ArrayOptimizeClass), 38 },
+ {typeof(global::SharedData.NestParent.NestContract), 39 },
+ {typeof(global::SharedData.FooClass), 40 },
+ {typeof(global::SharedData.BarClass), 41 },
+ {typeof(global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga), 42 },
+ {typeof(global::GlobalMan), 43 },
+ {typeof(global::Message), 44 },
+ {typeof(global::TextMessageBody), 45 },
+ {typeof(global::StampMessageBody), 46 },
+ {typeof(global::QuestMessageBody), 47 },
};
}
@@ -96,39 +107,50 @@ namespace MessagePack.Resolvers
case 1: return new MessagePack.Formatters.SharedData.IUnionCheckerFormatter();
case 2: return new MessagePack.Formatters.SharedData.IUnionChecker2Formatter();
case 3: return new MessagePack.Formatters.SharedData.IIVersioningUnionFormatter();
- case 4: return new MessagePack.Formatters.SharedData.FirstSimpleDataFormatter();
- case 5: return new MessagePack.Formatters.SharedData.SimlpeStringKeyDataFormatter();
- case 6: return new MessagePack.Formatters.SharedData.SimpleStructIntKeyDataFormatter();
- case 7: return new MessagePack.Formatters.SharedData.SimpleStructStringKeyDataFormatter();
- case 8: return new MessagePack.Formatters.SharedData.SimpleIntKeyDataFormatter();
- case 9: return new MessagePack.Formatters.SharedData.Vector2Formatter();
- case 10: return new MessagePack.Formatters.SharedData.EmptyClassFormatter();
- case 11: return new MessagePack.Formatters.SharedData.EmptyStructFormatter();
- case 12: return new MessagePack.Formatters.SharedData.Version1Formatter();
- case 13: return new MessagePack.Formatters.SharedData.Version2Formatter();
- case 14: return new MessagePack.Formatters.SharedData.Version0Formatter();
- case 15: return new MessagePack.Formatters.SharedData.HolderV1Formatter();
- case 16: return new MessagePack.Formatters.SharedData.HolderV2Formatter();
- case 17: return new MessagePack.Formatters.SharedData.HolderV0Formatter();
- case 18: return new MessagePack.Formatters.SharedData.Callback1Formatter();
- case 19: return new MessagePack.Formatters.SharedData.Callback1_2Formatter();
- case 20: return new MessagePack.Formatters.SharedData.Callback2Formatter();
- case 21: return new MessagePack.Formatters.SharedData.Callback2_2Formatter();
- case 22: return new MessagePack.Formatters.SharedData.MySubUnion1Formatter();
- case 23: return new MessagePack.Formatters.SharedData.MySubUnion2Formatter();
- case 24: return new MessagePack.Formatters.SharedData.MySubUnion3Formatter();
- case 25: return new MessagePack.Formatters.SharedData.MySubUnion4Formatter();
- case 26: return new MessagePack.Formatters.SharedData.VersioningUnionFormatter();
- case 27: return new MessagePack.Formatters.SharedData.MyClassFormatter();
- case 28: return new MessagePack.Formatters.SharedData.VersionBlockTestFormatter();
- case 29: return new MessagePack.Formatters.SharedData.UnVersionBlockTestFormatter();
- case 30: return new MessagePack.Formatters.SharedData.Empty1Formatter();
- case 31: return new MessagePack.Formatters.SharedData.Empty2Formatter();
- case 32: return new MessagePack.Formatters.SharedData.NonEmpty1Formatter();
- case 33: return new MessagePack.Formatters.SharedData.NonEmpty2Formatter();
- case 34: return new MessagePack.Formatters.SharedData.VectorLike2Formatter();
- case 35: return new MessagePack.Formatters.SharedData.Vector3LikeFormatter();
- case 36: return new MessagePack.Formatters.SharedData.ArrayOptimizeClassFormatter();
+ case 4: return new MessagePack.Formatters.SharedData.IUnionSampleFormatter();
+ case 5: return new MessagePack.Formatters.IMessageBodyFormatter();
+ case 6: return new MessagePack.Formatters.SharedData.FirstSimpleDataFormatter();
+ case 7: return new MessagePack.Formatters.SharedData.SimlpeStringKeyDataFormatter();
+ case 8: return new MessagePack.Formatters.SharedData.SimpleStructIntKeyDataFormatter();
+ case 9: return new MessagePack.Formatters.SharedData.SimpleStructStringKeyDataFormatter();
+ case 10: return new MessagePack.Formatters.SharedData.SimpleIntKeyDataFormatter();
+ case 11: return new MessagePack.Formatters.SharedData.Vector2Formatter();
+ case 12: return new MessagePack.Formatters.SharedData.EmptyClassFormatter();
+ case 13: return new MessagePack.Formatters.SharedData.EmptyStructFormatter();
+ case 14: return new MessagePack.Formatters.SharedData.Version1Formatter();
+ case 15: return new MessagePack.Formatters.SharedData.Version2Formatter();
+ case 16: return new MessagePack.Formatters.SharedData.Version0Formatter();
+ case 17: return new MessagePack.Formatters.SharedData.HolderV1Formatter();
+ case 18: return new MessagePack.Formatters.SharedData.HolderV2Formatter();
+ case 19: return new MessagePack.Formatters.SharedData.HolderV0Formatter();
+ case 20: return new MessagePack.Formatters.SharedData.Callback1Formatter();
+ case 21: return new MessagePack.Formatters.SharedData.Callback1_2Formatter();
+ case 22: return new MessagePack.Formatters.SharedData.Callback2Formatter();
+ case 23: return new MessagePack.Formatters.SharedData.Callback2_2Formatter();
+ case 24: return new MessagePack.Formatters.SharedData.MySubUnion1Formatter();
+ case 25: return new MessagePack.Formatters.SharedData.MySubUnion2Formatter();
+ case 26: return new MessagePack.Formatters.SharedData.MySubUnion3Formatter();
+ case 27: return new MessagePack.Formatters.SharedData.MySubUnion4Formatter();
+ case 28: return new MessagePack.Formatters.SharedData.VersioningUnionFormatter();
+ case 29: return new MessagePack.Formatters.SharedData.MyClassFormatter();
+ case 30: return new MessagePack.Formatters.SharedData.VersionBlockTestFormatter();
+ case 31: return new MessagePack.Formatters.SharedData.UnVersionBlockTestFormatter();
+ case 32: return new MessagePack.Formatters.SharedData.Empty1Formatter();
+ case 33: return new MessagePack.Formatters.SharedData.Empty2Formatter();
+ case 34: return new MessagePack.Formatters.SharedData.NonEmpty1Formatter();
+ case 35: return new MessagePack.Formatters.SharedData.NonEmpty2Formatter();
+ case 36: return new MessagePack.Formatters.SharedData.VectorLike2Formatter();
+ case 37: return new MessagePack.Formatters.SharedData.Vector3LikeFormatter();
+ case 38: return new MessagePack.Formatters.SharedData.ArrayOptimizeClassFormatter();
+ case 39: return new MessagePack.Formatters.SharedData.NestParent_NestContractFormatter();
+ case 40: return new MessagePack.Formatters.SharedData.FooClassFormatter();
+ case 41: return new MessagePack.Formatters.SharedData.BarClassFormatter();
+ case 42: return new MessagePack.Formatters.Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqagaFormatter();
+ case 43: return new MessagePack.Formatters.GlobalManFormatter();
+ case 44: return new MessagePack.Formatters.MessageFormatter();
+ case 45: return new MessagePack.Formatters.TextMessageBodyFormatter();
+ case 46: return new MessagePack.Formatters.StampMessageBodyFormatter();
+ case 47: return new MessagePack.Formatters.QuestMessageBodyFormatter();
default: return null;
}
}
@@ -256,6 +278,11 @@ namespace MessagePack.Formatters.SharedData
var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
offset += readSize;
+ if (!this.keyToJumpMap.TryGetValue(key, out key))
+ {
+ key = -1;
+ }
+
global::SharedData.IUnionChecker result = null;
switch (key)
{
@@ -360,6 +387,11 @@ namespace MessagePack.Formatters.SharedData
var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
offset += readSize;
+ if (!this.keyToJumpMap.TryGetValue(key, out key))
+ {
+ key = -1;
+ }
+
global::SharedData.IUnionChecker2 result = null;
switch (key)
{
@@ -449,6 +481,11 @@ namespace MessagePack.Formatters.SharedData
var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
offset += readSize;
+ if (!this.keyToJumpMap.TryGetValue(key, out key))
+ {
+ key = -1;
+ }
+
global::SharedData.IIVersioningUnion result = null;
switch (key)
{
@@ -467,6 +504,215 @@ namespace MessagePack.Formatters.SharedData
}
}
+ public sealed class IUnionSampleFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.IUnionSample>
+ {
+ readonly Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>> typeToKeyAndJumpMap;
+ readonly Dictionary<int, int> keyToJumpMap;
+
+ public IUnionSampleFormatter()
+ {
+ this.typeToKeyAndJumpMap = new Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>>(2, global::MessagePack.Internal.RuntimeTypeHandleEqualityComparer.Default)
+ {
+ { typeof(global::SharedData.FooClass).TypeHandle, new KeyValuePair<int, int>(0, 0) },
+ { typeof(global::SharedData.BarClass).TypeHandle, new KeyValuePair<int, int>(100, 1) },
+ };
+ this.keyToJumpMap = new Dictionary<int, int>(2)
+ {
+ { 0, 0 },
+ { 100, 1 },
+ };
+ }
+
+ public int Serialize(ref byte[] bytes, int offset, global::SharedData.IUnionSample value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ KeyValuePair<int, int> keyValuePair;
+ if (value != null && this.typeToKeyAndJumpMap.TryGetValue(value.GetType().TypeHandle, out keyValuePair))
+ {
+ var startOffset = offset;
+ offset += MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, keyValuePair.Key);
+ switch (keyValuePair.Value)
+ {
+ case 0:
+ offset += formatterResolver.GetFormatterWithVerify<global::SharedData.FooClass>().Serialize(ref bytes, offset, (global::SharedData.FooClass)value, formatterResolver);
+ break;
+ case 1:
+ offset += formatterResolver.GetFormatterWithVerify<global::SharedData.BarClass>().Serialize(ref bytes, offset, (global::SharedData.BarClass)value, formatterResolver);
+ break;
+ default:
+ break;
+ }
+
+ return offset - startOffset;
+ }
+
+ return MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ public global::SharedData.IUnionSample Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+
+ if (MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize) != 2)
+ {
+ throw new InvalidOperationException("Invalid Union data was detected. Type:global::SharedData.IUnionSample");
+ }
+ offset += readSize;
+
+ var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ offset += readSize;
+
+ if (!this.keyToJumpMap.TryGetValue(key, out key))
+ {
+ key = -1;
+ }
+
+ global::SharedData.IUnionSample result = null;
+ switch (key)
+ {
+ case 0:
+ result = (global::SharedData.IUnionSample)formatterResolver.GetFormatterWithVerify<global::SharedData.FooClass>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ offset += readSize;
+ break;
+ case 1:
+ result = (global::SharedData.IUnionSample)formatterResolver.GetFormatterWithVerify<global::SharedData.BarClass>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ offset += readSize;
+ break;
+ default:
+ offset += MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+
+ readSize = offset - startOffset;
+
+ return result;
+ }
+ }
+
+
+}
+
+#pragma warning disable 168
+#pragma warning restore 414
+#pragma warning restore 618
+#pragma warning restore 612
+#pragma warning disable 618
+#pragma warning disable 612
+#pragma warning disable 414
+#pragma warning disable 168
+
+namespace MessagePack.Formatters
+{
+ using System;
+ using System.Collections.Generic;
+ using MessagePack;
+
+ public sealed class IMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::IMessageBody>
+ {
+ readonly Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>> typeToKeyAndJumpMap;
+ readonly Dictionary<int, int> keyToJumpMap;
+
+ public IMessageBodyFormatter()
+ {
+ this.typeToKeyAndJumpMap = new Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>>(3, global::MessagePack.Internal.RuntimeTypeHandleEqualityComparer.Default)
+ {
+ { typeof(global::TextMessageBody).TypeHandle, new KeyValuePair<int, int>(10, 0) },
+ { typeof(global::StampMessageBody).TypeHandle, new KeyValuePair<int, int>(14, 1) },
+ { typeof(global::QuestMessageBody).TypeHandle, new KeyValuePair<int, int>(25, 2) },
+ };
+ this.keyToJumpMap = new Dictionary<int, int>(3)
+ {
+ { 10, 0 },
+ { 14, 1 },
+ { 25, 2 },
+ };
+ }
+
+ public int Serialize(ref byte[] bytes, int offset, global::IMessageBody value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ KeyValuePair<int, int> keyValuePair;
+ if (value != null && this.typeToKeyAndJumpMap.TryGetValue(value.GetType().TypeHandle, out keyValuePair))
+ {
+ var startOffset = offset;
+ offset += MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, keyValuePair.Key);
+ switch (keyValuePair.Value)
+ {
+ case 0:
+ offset += formatterResolver.GetFormatterWithVerify<global::TextMessageBody>().Serialize(ref bytes, offset, (global::TextMessageBody)value, formatterResolver);
+ break;
+ case 1:
+ offset += formatterResolver.GetFormatterWithVerify<global::StampMessageBody>().Serialize(ref bytes, offset, (global::StampMessageBody)value, formatterResolver);
+ break;
+ case 2:
+ offset += formatterResolver.GetFormatterWithVerify<global::QuestMessageBody>().Serialize(ref bytes, offset, (global::QuestMessageBody)value, formatterResolver);
+ break;
+ default:
+ break;
+ }
+
+ return offset - startOffset;
+ }
+
+ return MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ public global::IMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+
+ if (MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize) != 2)
+ {
+ throw new InvalidOperationException("Invalid Union data was detected. Type:global::IMessageBody");
+ }
+ offset += readSize;
+
+ var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ offset += readSize;
+
+ if (!this.keyToJumpMap.TryGetValue(key, out key))
+ {
+ key = -1;
+ }
+
+ global::IMessageBody result = null;
+ switch (key)
+ {
+ case 0:
+ result = (global::IMessageBody)formatterResolver.GetFormatterWithVerify<global::TextMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ offset += readSize;
+ break;
+ case 1:
+ result = (global::IMessageBody)formatterResolver.GetFormatterWithVerify<global::StampMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ offset += readSize;
+ break;
+ case 2:
+ result = (global::IMessageBody)formatterResolver.GetFormatterWithVerify<global::QuestMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ offset += readSize;
+ break;
+ default:
+ offset += MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+
+ readSize = offset - startOffset;
+
+ return result;
+ }
+ }
+
}
@@ -608,7 +854,7 @@ namespace MessagePack.Formatters.SharedData
var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize);
offset += readSize;
int key;
- if (____keyMapping.TryGetValue(stringKey, out key))
+ if (!____keyMapping.TryGetValue(stringKey, out key))
{
readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
goto NEXT_LOOP;
@@ -753,7 +999,7 @@ namespace MessagePack.Formatters.SharedData
var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize);
offset += readSize;
int key;
- if (____keyMapping.TryGetValue(stringKey, out key))
+ if (!____keyMapping.TryGetValue(stringKey, out key))
{
readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
goto NEXT_LOOP;
@@ -1569,7 +1815,7 @@ namespace MessagePack.Formatters.SharedData
var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize);
offset += readSize;
int key;
- if (____keyMapping.TryGetValue(stringKey, out key))
+ if (!____keyMapping.TryGetValue(stringKey, out key))
{
readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
goto NEXT_LOOP;
@@ -1642,7 +1888,7 @@ namespace MessagePack.Formatters.SharedData
var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize);
offset += readSize;
int key;
- if (____keyMapping.TryGetValue(stringKey, out key))
+ if (!____keyMapping.TryGetValue(stringKey, out key))
{
readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
goto NEXT_LOOP;
@@ -2249,7 +2495,7 @@ namespace MessagePack.Formatters.SharedData
var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize);
offset += readSize;
int key;
- if (____keyMapping.TryGetValue(stringKey, out key))
+ if (!____keyMapping.TryGetValue(stringKey, out key))
{
readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
goto NEXT_LOOP;
@@ -2376,7 +2622,7 @@ namespace MessagePack.Formatters.SharedData
var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize);
offset += readSize;
int key;
- if (____keyMapping.TryGetValue(stringKey, out key))
+ if (!____keyMapping.TryGetValue(stringKey, out key))
{
readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
goto NEXT_LOOP;
@@ -2667,6 +2913,557 @@ namespace MessagePack.Formatters.SharedData
}
}
+
+ public sealed class NestParent_NestContractFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.NestParent.NestContract>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::SharedData.NestParent.NestContract value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.MyProperty);
+ return offset - startOffset;
+ }
+
+ public global::SharedData.NestParent.NestContract Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __MyProperty__ = default(int);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __MyProperty__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::SharedData.NestParent.NestContract();
+ ____result.MyProperty = __MyProperty__;
+ return ____result;
+ }
+ }
+
+
+ public sealed class FooClassFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.FooClass>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::SharedData.FooClass value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.XYZ);
+ return offset - startOffset;
+ }
+
+ public global::SharedData.FooClass Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __XYZ__ = default(int);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __XYZ__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::SharedData.FooClass();
+ ____result.XYZ = __XYZ__;
+ return ____result;
+ }
+ }
+
+
+ public sealed class BarClassFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.BarClass>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::SharedData.BarClass value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += formatterResolver.GetFormatterWithVerify<string>().Serialize(ref bytes, offset, value.OPQ, formatterResolver);
+ return offset - startOffset;
+ }
+
+ public global::SharedData.BarClass Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __OPQ__ = default(string);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __OPQ__ = formatterResolver.GetFormatterWithVerify<string>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::SharedData.BarClass();
+ ____result.OPQ = __OPQ__;
+ return ____result;
+ }
+ }
+
+}
+
+#pragma warning disable 168
+#pragma warning restore 414
+#pragma warning restore 618
+#pragma warning restore 612
+#pragma warning disable 618
+#pragma warning disable 612
+#pragma warning disable 414
+#pragma warning disable 168
+
+namespace MessagePack.Formatters.Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad
+{
+ using System;
+ using MessagePack;
+
+
+ public sealed class TnonodsfarnoiuAtatqagaFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.MyProperty);
+ return offset - startOffset;
+ }
+
+ public global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __MyProperty__ = default(int);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __MyProperty__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga();
+ ____result.MyProperty = __MyProperty__;
+ return ____result;
+ }
+ }
+
+}
+
+#pragma warning disable 168
+#pragma warning restore 414
+#pragma warning restore 618
+#pragma warning restore 612
+#pragma warning disable 618
+#pragma warning disable 612
+#pragma warning disable 414
+#pragma warning disable 168
+
+namespace MessagePack.Formatters
+{
+ using System;
+ using MessagePack;
+
+
+ public sealed class GlobalManFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::GlobalMan>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::GlobalMan value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.MyProperty);
+ return offset - startOffset;
+ }
+
+ public global::GlobalMan Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __MyProperty__ = default(int);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __MyProperty__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::GlobalMan();
+ ____result.MyProperty = __MyProperty__;
+ return ____result;
+ }
+ }
+
+
+ public sealed class MessageFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::Message>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::Message value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.UserId);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.RoomId);
+ offset += formatterResolver.GetFormatterWithVerify<global::System.DateTime>().Serialize(ref bytes, offset, value.PostTime, formatterResolver);
+ offset += formatterResolver.GetFormatterWithVerify<global::IMessageBody>().Serialize(ref bytes, offset, value.Body, formatterResolver);
+ return offset - startOffset;
+ }
+
+ public global::Message Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __UserId__ = default(int);
+ var __RoomId__ = default(int);
+ var __PostTime__ = default(global::System.DateTime);
+ var __Body__ = default(global::IMessageBody);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __UserId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ case 1:
+ __RoomId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ case 2:
+ __PostTime__ = formatterResolver.GetFormatterWithVerify<global::System.DateTime>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ break;
+ case 3:
+ __Body__ = formatterResolver.GetFormatterWithVerify<global::IMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::Message();
+ ____result.UserId = __UserId__;
+ ____result.RoomId = __RoomId__;
+ ____result.PostTime = __PostTime__;
+ ____result.Body = __Body__;
+ return ____result;
+ }
+ }
+
+
+ public sealed class TextMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::TextMessageBody>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::TextMessageBody value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += formatterResolver.GetFormatterWithVerify<string>().Serialize(ref bytes, offset, value.Text, formatterResolver);
+ return offset - startOffset;
+ }
+
+ public global::TextMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __Text__ = default(string);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __Text__ = formatterResolver.GetFormatterWithVerify<string>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::TextMessageBody();
+ ____result.Text = __Text__;
+ return ____result;
+ }
+ }
+
+
+ public sealed class StampMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::StampMessageBody>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::StampMessageBody value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.StampId);
+ return offset - startOffset;
+ }
+
+ public global::StampMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __StampId__ = default(int);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __StampId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::StampMessageBody();
+ ____result.StampId = __StampId__;
+ return ____result;
+ }
+ }
+
+
+ public sealed class QuestMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::QuestMessageBody>
+ {
+
+ public int Serialize(ref byte[] bytes, int offset, global::QuestMessageBody value, global::MessagePack.IFormatterResolver formatterResolver)
+ {
+ if (value == null)
+ {
+ return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset);
+ }
+
+ var startOffset = offset;
+ offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2);
+ offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.QuestId);
+ offset += formatterResolver.GetFormatterWithVerify<string>().Serialize(ref bytes, offset, value.Text, formatterResolver);
+ return offset - startOffset;
+ }
+
+ public global::QuestMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize)
+ {
+ if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset))
+ {
+ readSize = 1;
+ return null;
+ }
+
+ var startOffset = offset;
+ var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
+ offset += readSize;
+
+ var __QuestId__ = default(int);
+ var __Text__ = default(string);
+
+ for (int i = 0; i < length; i++)
+ {
+ var key = i;
+
+ switch (key)
+ {
+ case 0:
+ __QuestId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
+ break;
+ case 1:
+ __Text__ = formatterResolver.GetFormatterWithVerify<string>().Deserialize(bytes, offset, formatterResolver, out readSize);
+ break;
+ default:
+ readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset);
+ break;
+ }
+ offset += readSize;
+ }
+
+ readSize = offset - startOffset;
+
+ var ____result = new global::QuestMessageBody();
+ ____result.QuestId = __QuestId__;
+ ____result.Text = __Text__;
+ return ____result;
+ }
+ }
+
}
#pragma warning disable 168
diff --git a/sandbox/Sandbox/Program.cs b/sandbox/Sandbox/Program.cs
index ca9d35bc..5e2f9873 100644
--- a/sandbox/Sandbox/Program.cs
+++ b/sandbox/Sandbox/Program.cs
@@ -208,7 +208,7 @@ namespace Sandbox
// mark inheritance types
[MessagePack.Union(0, typeof(FooClass))]
- [MessagePack.Union(1, typeof(BarClass))]
+ [MessagePack.Union(100, typeof(BarClass))]
public interface IUnionSample
{
}
@@ -232,29 +232,44 @@ namespace Sandbox
{
static void Main(string[] args)
{
- // composite same as StandardResolver
CompositeResolver.RegisterAndSetAsDefault(
- MessagePack.Resolvers.BuiltinResolver.Instance,
+ MessagePack.Resolvers.GeneratedResolver.Instance,
+ MessagePack.Resolvers.StandardResolver.Instance
+ );
- // replace enumasstring resolver
- MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance,
+ var foo = MessagePackSerializer.Serialize<IUnionSample>(new FooClass() { XYZ = 999 });
+ var bar = MessagePackSerializer.Serialize<IUnionSample>(new BarClass() { OPQ = "hogemoge" });
- MessagePack.Resolvers.DynamicGenericResolver.Instance,
- MessagePack.Resolvers.DynamicUnionResolver.Instance,
- MessagePack.Resolvers.DynamicObjectResolver.Instance,
+ var f2 = MessagePackSerializer.Deserialize<IUnionSample>(foo);
+ var b2 = MessagePackSerializer.Deserialize<IUnionSample>(bar);
+ Console.WriteLine((f2 as FooClass).XYZ);
+ Console.WriteLine((b2 as BarClass).OPQ);
- // final fallback(last priority)
- MessagePack.Resolvers.DynamicContractlessObjectResolver.Instance
- );
+
+
+ //// composite same as StandardResolver
+ //CompositeResolver.RegisterAndSetAsDefault(
+ // MessagePack.Resolvers.BuiltinResolver.Instance,
+
+ // // replace enumasstring resolver
+ // MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance,
+
+ // MessagePack.Resolvers.DynamicGenericResolver.Instance,
+ // MessagePack.Resolvers.DynamicUnionResolver.Instance,
+ // MessagePack.Resolvers.DynamicObjectResolver.Instance,
+
+ // // final fallback(last priority)
+ // MessagePack.Resolvers.DynamicContractlessObjectResolver.Instance
+ //);
- //var t = new DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>(null, null, null, null, null, null, null, null, null);
+ ////var t = new DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>(null, null, null, null, null, null, null, null, null);
- var f = StandardResolver.Instance.GetFormatter<DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>>();
+ //var f = StandardResolver.Instance.GetFormatter<DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>>();
- //var __request = MessagePackSerializer.Serialize(t);
+ // //var __request = MessagePackSerializer.Serialize(t);
}
diff --git a/sandbox/SharedData/Class1.cs b/sandbox/SharedData/Class1.cs
index da9b7e03..9732f171 100644
--- a/sandbox/SharedData/Class1.cs
+++ b/sandbox/SharedData/Class1.cs
@@ -688,6 +688,26 @@ namespace SharedData
public int MyProperty { get; set; }
}
}
+
+ [MessagePack.Union(0, typeof(FooClass))]
+ [MessagePack.Union(100, typeof(BarClass))]
+ public interface IUnionSample
+ {
+ }
+
+ [MessagePackObject]
+ public class FooClass : IUnionSample
+ {
+ [Key(0)]
+ public int XYZ { get; set; }
+ }
+
+ [MessagePackObject]
+ public class BarClass : IUnionSample
+ {
+ [Key(0)]
+ public string OPQ { get; set; }
+ }
}
namespace Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad
@@ -698,4 +718,60 @@ namespace Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad
[Key(0)]
public int MyProperty { get; set; }
}
+}
+
+[MessagePackObject]
+public class GlobalMan
+{
+ [Key(0)]
+ public int MyProperty { get; set; }
+}
+
+[MessagePackObject]
+public class Message
+{
+ [Key(0)]
+ public int UserId { get; set; }
+ [Key(1)]
+ public int RoomId { get; set; }
+ [Key(2)]
+ public DateTime PostTime { get; set; }
+
+ // 本文
+ [Key(3)]
+ public IMessageBody Body { get; set; }
+}
+
+[Union(10, typeof(TextMessageBody))]
+[Union(14, typeof(StampMessageBody))]
+[Union(25, typeof(QuestMessageBody))]
+public interface IMessageBody { }
+
+[MessagePackObject]
+public class TextMessageBody : IMessageBody
+{
+ [Key(0)]
+ public string Text { get; set; }
+}
+
+[MessagePackObject]
+public class StampMessageBody : IMessageBody
+{
+ [Key(0)]
+ public int StampId { get; set; }
+}
+
+[MessagePackObject]
+public class QuestMessageBody : IMessageBody
+{
+ [Key(0)]
+ public int QuestId { get; set; }
+ [Key(1)]
+ public string Text { get; set; }
+}
+
+
+public enum GlobalMyEnum
+{
+ Apple, Orange
} \ No newline at end of file
diff --git a/sandbox/SharedData/SharedData.csproj b/sandbox/SharedData/SharedData.csproj
index c8bdcfb8..ad9c1765 100644
--- a/sandbox/SharedData/SharedData.csproj
+++ b/sandbox/SharedData/SharedData.csproj
@@ -33,8 +33,17 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
+ <Reference Include="MessagePack, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\MessagePack.1.2.2\lib\net45\MessagePack.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
+ <Reference Include="System.Threading.Tasks.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\System.Threading.Tasks.Extensions.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+ <HintPath>..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
+ </Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
@@ -45,10 +54,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\..\src\MessagePack\MessagePack.csproj">
- <Project>{7abb33ee-a2f1-492b-8daf-5df89f0f0b79}</Project>
- <Name>MessagePack</Name>
- </ProjectReference>
+ <None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> \ No newline at end of file
diff --git a/sandbox/SharedData/packages.config b/sandbox/SharedData/packages.config
new file mode 100644
index 00000000..9b66c2a1
--- /dev/null
+++ b/sandbox/SharedData/packages.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="MessagePack" version="1.2.3" targetFramework="net461" />
+ <package id="System.Threading.Tasks.Extensions" version="4.3.0" targetFramework="net461" />
+ <package id="System.ValueTuple" version="4.3.0" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs b/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs
index 07d56030..e754d576 100644
--- a/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs
+++ b/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs
@@ -26,7 +26,7 @@ namespace MessagePack.CodeGenerator
public bool HasIMessagePackSerializationCallbackReceiver { get; set; }
public bool NeedsCastOnBefore { get; set; }
public bool NeedsCastOnAfter { get; set; }
- public string FormatterName => Namespace + "." + Name + "Formatter";
+ public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter";
public int WriteCount
{
@@ -126,7 +126,7 @@ namespace MessagePack.CodeGenerator
public string FullName { get; set; }
public string UnderlyingType { get; set; }
- public string FormatterName => Namespace + "." + Name + "Formatter";
+ public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter";
}
public class GenericSerializationInfo : IResolverRegisterInfo, IEquatable<GenericSerializationInfo>
@@ -151,7 +151,7 @@ namespace MessagePack.CodeGenerator
public string Namespace { get; set; }
public string Name { get; set; }
public string FullName { get; set; }
- public string FormatterName => Namespace + "." + Name + "Formatter";
+ public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter";
public UnionSubTypeInfo[] SubTypes { get; set; }
}
diff --git a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs
index d52df307..22918bf3 100644
--- a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs
+++ b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs
@@ -160,7 +160,7 @@ namespace MessagePack.CodeGenerator.Generator
this.Write(": return new ");
#line 67 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\ResolverTemplate.tt"
- this.Write(this.ToStringHelper.ToStringWithCulture(x.FormatterName.StartsWith("global::") ? x.FormatterName: FormatterNamespace + "." + x.FormatterName));
+ this.Write(this.ToStringHelper.ToStringWithCulture(x.FormatterName.StartsWith("global::") ? x.FormatterName: (!string.IsNullOrEmpty(FormatterNamespace) ? FormatterNamespace + "." : FormatterNamespace) + x.FormatterName));
#line default
#line hidden
diff --git a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt
index 53877d23..b05afcea 100644
--- a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt
+++ b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt
@@ -64,7 +64,7 @@ namespace <#= Namespace #>
switch (key)
{
<# for(var i = 0; i < registerInfos.Length; i++) { var x = registerInfos[i]; #>
- case <#= i #>: return new <#= x.FormatterName.StartsWith("global::") ? x.FormatterName: FormatterNamespace + "." + x.FormatterName#>();
+ case <#= i #>: return new <#= x.FormatterName.StartsWith("global::") ? x.FormatterName: (!string.IsNullOrEmpty(FormatterNamespace) ? FormatterNamespace + "." : FormatterNamespace) + x.FormatterName#>();
<# } #>
default: return null;
}
diff --git a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs
index edfe7d8c..6ca94e75 100644
--- a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs
+++ b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs
@@ -226,37 +226,38 @@ namespace MessagePack.CodeGenerator.Generator
#line default
#line hidden
this.Write("\");\r\n\t\t\t}\r\n\t\t\toffset += readSize;\r\n\r\n\t\t\tvar key = MessagePackBinary.ReadInt32(byt" +
- "es, offset, out readSize);\r\n\t\t\toffset += readSize;\r\n\r\n\t\t\t");
+ "es, offset, out readSize);\r\n\t\t\toffset += readSize;\r\n\r\n if (!this.keyT" +
+ "oJumpMap.TryGetValue(key, out key))\r\n\t\t\t{\r\n\t\t\t\tkey = -1;\r\n\t\t\t}\r\n\r\n\t\t\t");
- #line 83 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 88 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(info.FullName));
#line default
#line hidden
this.Write(" result = null;\r\n\t\t\tswitch (key)\r\n\t\t\t{\r\n");
- #line 86 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 91 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
for(var i = 0; i < info.SubTypes.Length; i++) { var item = info.SubTypes[i];
#line default
#line hidden
this.Write("\t\t\t\tcase ");
- #line 87 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 92 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(i));
#line default
#line hidden
this.Write(":\r\n\t\t\t\t\tresult = (");
- #line 88 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 93 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(info.FullName));
#line default
#line hidden
this.Write(")formatterResolver.GetFormatterWithVerify<");
- #line 88 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 93 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
this.Write(this.ToStringHelper.ToStringWithCulture(item.Type));
#line default
@@ -264,7 +265,7 @@ namespace MessagePack.CodeGenerator.Generator
this.Write(">().Deserialize(bytes, offset, formatterResolver, out readSize);\r\n\t\t\t\t\toffset += " +
"readSize;\r\n\t\t\t\t\tbreak;\r\n");
- #line 91 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 96 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
}
#line default
@@ -273,7 +274,7 @@ namespace MessagePack.CodeGenerator.Generator
"\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treadSize = offset - startOffset;\r\n\t\t\t\r\n\t\t\treturn result;" +
"\r\n }\r\n }\r\n\r\n");
- #line 103 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
+ #line 108 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt"
}
#line default
diff --git a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt
index d150728f..5f9eca35 100644
--- a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt
+++ b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt
@@ -80,6 +80,11 @@ namespace <#= Namespace #>
var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
offset += readSize;
+ if (!this.keyToJumpMap.TryGetValue(key, out key))
+ {
+ key = -1;
+ }
+
<#= info.FullName #> result = null;
switch (key)
{
diff --git a/src/MessagePack.CodeGenerator/Program.cs b/src/MessagePack.CodeGenerator/Program.cs
index 48992e75..c53d9b91 100644
--- a/src/MessagePack.CodeGenerator/Program.cs
+++ b/src/MessagePack.CodeGenerator/Program.cs
@@ -103,7 +103,7 @@ namespace MessagePack.CodeGenerator
.GroupBy(x => x.Namespace)
.Select(x => new FormatterTemplate()
{
- Namespace = cmdArgs.GetNamespaceDot() + "Formatters." + x.Key,
+ Namespace = cmdArgs.GetNamespaceDot() + "Formatters" + ((x.Key == null) ? "" : "." + x.Key),
objectSerializationInfos = x.ToArray(),
})
.ToArray();
@@ -112,7 +112,7 @@ namespace MessagePack.CodeGenerator
.GroupBy(x => x.Namespace)
.Select(x => new EnumTemplate()
{
- Namespace = cmdArgs.GetNamespaceDot() + "Formatters." + x.Key,
+ Namespace = cmdArgs.GetNamespaceDot() + "Formatters" + ((x.Key == null) ? "" : "." + x.Key),
enumSerializationInfos = x.ToArray()
})
.ToArray();
@@ -121,7 +121,7 @@ namespace MessagePack.CodeGenerator
.GroupBy(x => x.Namespace)
.Select(x => new UnionTemplate()
{
- Namespace = cmdArgs.GetNamespaceDot() + "Formatters." + x.Key,
+ Namespace = cmdArgs.GetNamespaceDot() + "Formatters" + ((x.Key == null) ? "" : "." + x.Key),
unionSerializationInfos = x.ToArray()
})
.ToArray();
diff --git a/tests/MessagePack.Tests/UnionResolverTest.cs b/tests/MessagePack.Tests/UnionResolverTest.cs
index 81ead7b7..e2b4f3da 100644
--- a/tests/MessagePack.Tests/UnionResolverTest.cs
+++ b/tests/MessagePack.Tests/UnionResolverTest.cs
@@ -66,6 +66,24 @@ namespace MessagePack.Tests
convert2[0].IsInstanceOf<B2>().Is(x => x.Name == "b" && x.Val == 2);
convert2[1].IsInstanceOf<C2>().Is(x => x.Name == "t" && x.Val == 5 && x.Valer == 99);
}
+
+ [Fact]
+ public void Union2()
+ {
+
+
+ var a = MessagePackSerializer.Serialize<IMessageBody>(new TextMessageBody() { Text = "hoge" });
+ var b = MessagePackSerializer.Serialize<IMessageBody>(new StampMessageBody() { StampId = 10 });
+ var c = MessagePackSerializer.Serialize<IMessageBody>(new QuestMessageBody() { Text = "hugahuga", QuestId = 99 });
+
+ var a2 = MessagePackSerializer.Deserialize<IMessageBody>(a);
+ var b2 = MessagePackSerializer.Deserialize<IMessageBody>(b);
+ var c2 = MessagePackSerializer.Deserialize<IMessageBody>(c);
+
+ (a2 as TextMessageBody).Text.Is("hoge");
+ (b2 as StampMessageBody).StampId.Is(10);
+ (c2 as QuestMessageBody).Is(x => x.Text == "hugahuga" && x.QuestId == 99);
+ }
}
}