Hyperion icon indicating copy to clipboard operation
Hyperion copied to clipboard

Can't deserialize ISerializable

Open alexvaluyskiy opened this issue 7 years ago • 1 comments

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 avatar Mar 25 '17 10:03 alexvaluyskiy

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

alexvaluyskiy avatar Mar 27 '17 18:03 alexvaluyskiy