저는 지난 몇 시간 동안 'No parameterless constructor found for [type]'
예외로 고생했습니다. 이제는 응용 프로그램에서 얻은 것을 미러링해야하는 간단한 단위 테스트를 만들었습니다. 수행하지 않으면이 예외가 throw 된 것 같습니다. stream.Position = 0
.스트림 끝을지나 읽을 때 매개 변수없는 생성자 예외가 발생하지 않습니다.
또한 어떤 경우에도 객체가 표준 클래스 (추상 클래스에서 파생되지 않음) 일 때이 예외가 발생하지 않습니다.
아래의 코드를 참조하십시오 :있는 그대로가
실행 -이 생성자는 자료
를 찾을 수 없습니다 말하는 깰 것이주석 stream.Position = 0 및 괜찮을 것
덧글 라인을 다시 주석으로, 파생 클래스를 기본에서 상속하지 않도록 변경하고 클래스의 유일한 속성의 주석 처리를 제거하고 실행합니다. 중단되지는 않지만 (분명히 이름은 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; }
}
설명 해 주셔서 감사합니다. 실제로 동작이 더 현실적으로 이루어집니다. –