Skip to content

[UWP] InvalidOperationException thrown on serializing a class has static field which is set a value on declaration #170

@dsuz

Description

@dsuz

Hello,
Let me report an issue.

ISSUE DESCRIPTION
Serialization fails with InvalidOperationException if:

  • The class has static member variables
  • Put values to static member variables on declaration
  • Platform is UWP (*)

(*) I verified this works on Unity Editor.

ENVIRONMENT
MessagePack for CLI 0.7.0-beta1
Visual Studio 2015 Version 14.0.25123.00 Update 2
Windows 10

REPRO CODE
Put the following code and call Serialize() method.

 public class ClassHasStaticField { public string m_string; #if NO_PROBLEM_PATTERN static int m_int; #else static int m_int = 1000; #endif public ClassHasStaticField() { m_string = "dummy"; m_int = 1000; } } void Serialize() { ClassHasStaticField chsf = new ClassHasStaticField(); MsgPack.Serialization.MessagePackSerializer serializer; byte[] byteArray; using (MemoryStream stream = new MemoryStream()) { try { serializer = MsgPack.Serialization.MessagePackSerializer.Get(chsf.GetType()); byteArray = serializer.PackSingleObject(chsf); } catch (Exception ex) { Debug.WriteLine("Exception caught: " + ex.ToString()); } } } 

EXPECTED RESULT
Serialized successfully.

ACTUAL RESULT
The following exception thrown:

Exception thrown: 'System.InvalidOperationException' in System.Linq.dll Exception caught: System.InvalidOperationException: Sequence contains more than one matching element at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) at MsgPack.ReflectionAbstractions.GetConstructor(TypeInfo source, Type[] parameteres) at MsgPack.ReflectionAbstractions.GetConstructor(Type source, Type[] parameteres) at MsgPack.Serialization.SerializationTarget.Prepare(SerializationContext context, Type targetType) at MsgPack.Serialization.ReflectionSerializers.ReflectionObjectMessagePackSerializer`1..ctor(SerializationContext context) at MsgPack.Serialization.MessagePackSerializer.CreateReflectionInternal[T](SerializationContext context, Type concreteType, PolymorphismSchema schema) at MsgPack.Serialization.SerializationContext.GetSerializer[T](Object providerParameter) at MsgPack.Serialization.SerializationContext.SerializerGetter`1.Get(SerializationContext context, Object providerParameter) at MsgPack.Serialization.SerializationContext.SerializerGetter.Get(SerializationContext context, Type targetType, Object providerParameter) at MsgPack.Serialization.SerializationContext.GetSerializer(Type targetType, Object providerParameter) at MsgPack.Serialization.MessagePackSerializer.Get(Type targetType, SerializationContext context, Object providerParameter) at MsgPack.Serialization.MessagePackSerializer.Get(Type targetType) at Serializer_for_UWP.MainPage.Serialize() 

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugDetected as bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions