过去几个小时我一直在处理异常'No parameterless constructor found for [type]'
。现在我创建了一个简单的单元测试,它应该能够反映我在应用程序中获得的结果,并且当我不执行stream.Position = 0
时,似乎会抛出此异常。尝试读取数据流结尾时没有无参数构造函数异常
此外,当对象只是一个标准类(不是从抽象派生而来)时,我不会得到这个异常。
请参见下面的代码:
运行它是 - 它会破坏说,没有构造可以为基地
找到取消注释stream.Position = 0,这将是罚款
再次注释掉该行,将Derived类更改为不从Base继承,并取消注释类中的唯一属性,运行它 - 它不会中断(但显然该名称将为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; }
}
感谢您的解释 - 行为现在确实更有意义。 – 2013-03-04 20:25:03