akkadotnet / Hyperion

Polymorphic serialization for .NET
Apache License 2.0
277 stars 62 forks source link

Can't deserialize ISerializable #45

Open alexvaluyskiy opened 7 years ago

alexvaluyskiy commented 7 years ago

NullReferenceExcetions throws on ISerializable deserialization

public class Person : ISerializable
{
    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public void GetObjectData(SerializationInfo info, StreamingContext streamingContext)
    {
        info.AddValue("FirstName", FirstName);
        info.AddValue("LastName", LastName);
    }
}
var expected = new Person("Scott", "Hanselman");

Serialize(expected);
Reset();
var actual = Deserialize<Person>();
Assert.Equal(expected.FirstName, actual.FirstName);
Assert.Equal(expected.LastName, actual.LastName);
Error Message:
 System.NullReferenceException : Object reference not set to an instance of an object.
Stack Trace:
   at Hyperion.SerializerFactories.ISerializableSerializerFactory.<>c__DisplayClass2_0.<BuildSerializer>b__0(Stream stream, DeserializerSession session)
   at Hyperion.ValueSerializers.ObjectSerializer.ReadValue(Stream stream, DeserializerSession session)
   at Hyperion.Serializer.Deserialize[T](Stream stream)
   at Hyperion.Tests.TestBase.Deserialize[T]() in C:\Projects\Hyperion\Hyperion.Tests\TestBase.cs:line 44
   at Hyperion.Tests.ISerializableTests.CanSerializeClassesWithISerializable() in C:\Projects\Hyperion\Hyperion.Tests\ISerializableTests.cs:line 78
alexvaluyskiy commented 7 years ago

https://github.com/akkadotnet/Hyperion/blob/dev/Hyperion/SerializerFactories/ISerializableSerializerFactory.cs#L47 It should not throw, if can't find a constructor