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

System.Globalization.CultureInfo Exception thrown #112

Closed
jashutosh opened this issue Aug 28, 2015 · 2 comments
Closed

System.Globalization.CultureInfo Exception thrown #112

jashutosh opened this issue Aug 28, 2015 · 2 comments
Labels
enhancement Requires or request to feature enhancement

Comments

@jashutosh
Copy link

Hi,
i am developing a client server app in c# using MsgPack.dll. and I'm getting this error in following code @ var serializer line.
Code:
System.IO.Stream buffer = new System.IO.MemoryStream();
// Creates serializer.
//ERROR LINE var serializer = SerializationContext.Default.GetSerializer();
// Pack obj to stream.
serializer.Pack(buffer, M);
buffer.Position = 0;

Error:
An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in MsgPack.dll

Additional information: Type 'System.Globalization.CultureInfo' does not have default (parameterless) public constructor.

STACK:
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.GetDefaultConstructor(Type instanceType) at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.d__4a.MoveNext()
at System.Linq.Buffer1..ctor(IEnumerable1 source)
at System.Linq.Enumerable.ToArrayTSource
at MsgPack.Serialization.EmittingSerializers.ILEmittingSerializerBuilder2.EmitSequentialStatements(TContext context, Type contextType, IEnumerable1 statements)
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildObjectUnpackFrom(TContext context, IList1 entries)
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildObjectSerializer(TContext context) at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildSerializer(TContext context)
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildSerializerInstance(SerializationContext context) at MsgPack.Serialization.AutoMessagePackSerializer1..ctor(SerializationContext context, ISerializerBuilder1 builder) at MsgPack.Serialization.MessagePackSerializer.CreateInternal[T](SerializationContext context) at MsgPack.Serialization.SerializationContext.GetSerializer[T](Object providerParameter) at MsgPack.Serialization.EmittingSerializers.Generated.System_Data_DataTableSerializer11..ctor(SerializationContext ) at lambda_method(Closure , SerializationContext ) at MsgPack.Serialization.EmittingSerializers.SerializerEmitter.CreateInstance[T](SerializationContext context) at MsgPack.Serialization.EmittingSerializers.ILEmittingSerializerBuilder2.<>c__DisplayClass5a.b__59(SerializationContext context)
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildSerializerInstance(SerializationContext context) at MsgPack.Serialization.AutoMessagePackSerializer1..ctor(SerializationContext context, ISerializerBuilder1 builder) at MsgPack.Serialization.MessagePackSerializer.CreateInternal[T](SerializationContext context) at MsgPack.Serialization.SerializationContext.GetSerializer[T](Object providerParameter) at MsgPack.Serialization.EmittingSerializers.Generated.message_SetDailyReportSerializer10..ctor(SerializationContext ) at lambda_method(Closure , SerializationContext ) at MsgPack.Serialization.EmittingSerializers.SerializerEmitter.CreateInstance[T](SerializationContext context) at MsgPack.Serialization.EmittingSerializers.ILEmittingSerializerBuilder2.<>c__DisplayClass5a.b__59(SerializationContext context)
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildSerializerInstance(SerializationContext context) at MsgPack.Serialization.AutoMessagePackSerializer1..ctor(SerializationContext context, ISerializerBuilder1 builder) at MsgPack.Serialization.MessagePackSerializer.CreateInternal[T](SerializationContext context) at MsgPack.Serialization.SerializationContext.GetSerializer[T](Object providerParameter) at MsgPack.Serialization.EmittingSerializers.Generated.messageSerializer0..ctor(SerializationContext ) at lambda_method(Closure , SerializationContext ) at MsgPack.Serialization.EmittingSerializers.SerializerEmitter.CreateInstance[T](SerializationContext context) at MsgPack.Serialization.EmittingSerializers.ILEmittingSerializerBuilder2.<>c__DisplayClass5a.b__59(SerializationContext context)
at MsgPack.Serialization.AbstractSerializers.SerializerBuilder3.BuildSerializerInstance(SerializationContext context) at MsgPack.Serialization.AutoMessagePackSerializer1..ctor(SerializationContext context, ISerializerBuilder`1 builder)
at MsgPack.Serialization.MessagePackSerializer.CreateInternalT
at MsgPack.Serialization.SerializationContext.GetSerializerT
at MsgPack.Serialization.SerializationContext.GetSerializerT
at SubscriberSimulator.Program.Main(String[] args) in [PATH]\client.cs:line 86
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

any idea how to solve this? any help is appreciated. Lots of Thanks in advance.... :-). this shit cost me almost 20 Hrs. of coding...

@yfakariya
Copy link
Member

Fast solution is implementing custom serializer and registering it.
Sample is here:

public class CultureInfoSerializer : MessagePackSerializer<CultureInfo>
{
    public CultureInfoSerializer ( SerializationContext ownerContext )
        : base( ownerContext ) { }

    protected internal override void PackToCore( Packer packer, CultureInfo objectTree )
    {
        packer.Pack( objectTree.Name );
    }

    protected internal override CultureInfo UnpackFromCore( Unpacker unpacker )
    {
        return CultureInfo.GetCultureInfo( unpacker.LastReadData.AsString() );
    }
}

Registration sample is:

var context = new SerializationContext();
context.Serializers.Register( new CultureInfoSerializer( context ) );

// You can serialize/deserialize CultureInfo with the context here.

I think CultureInfo is basic type, so I'll add builtin serializer for it in next release. Thanks!

@yfakariya yfakariya added the enhancement Requires or request to feature enhancement label Aug 29, 2015
yfakariya added a commit that referenced this issue Aug 30, 2015
This commit adds built-in CultureInfo serializer. The CultureInfo is essential type of .NET, so it is reasonable to add built-in serializer to support it.
@yfakariya
Copy link
Member

This issue fixed in 0.6.2. Please check it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Requires or request to feature enhancement
Projects
None yet
Development

No branches or pull requests

2 participants