私は'No parameterless constructor found for [type]'
過去数時間、例外に苦労してきました。ここで、アプリケーションにあるものを反映する単純な単体テストを作成しました。実行しないと、この例外がスローされるようですstream.Position = 0
。
また、オブジェクトが単なる標準クラス (抽象クラスから派生したものではない) である場合、この例外は発生しません。
以下のコードを参照してください。
そのまま実行 - Base のコンストラクターが見つからないと言って壊れます
stream.Position = 0 のコメントを外してください。
行を再度コメントアウトし、Derived クラスを Base から継承しないように変更し、クラス内の唯一のプロパティのコメントを外して実行します - 壊れません (ただし、明らかに Name は null になります)
誰かがなぜこれがこのように機能するのか説明できますか? #1 がスローする理由 (または #3 がスローしない理由) と、このメッセージの理由は?
[Test]
public void CanSerialize_Derived()
{
var derived = new Derived() {Name = "ngf"};
var stream = new MemoryStream();
Serializer.Serialize(stream, derived);
//stream.Position = 0;
var deserializedInstance = Serializer.Deserialize<Derived>(stream);
}
[ProtoContract]
[ProtoInclude(9, typeof(Derived))]
public abstract class Base
{
[ProtoMember(1)]
public string Name { get; set; }
}
[ProtoContract]
public class Derived : Base
{
//[ProtoMember(1)]
//public string Name { get; set; }
}