2009-08-26 2 views
10

Protobuf-Net을 사용하면 매개 변수없는 생성자를 사용하지 않고 클래스를 deserialize 할 수없는 것처럼 보입니다. 그렇지 않으면 뭔가가 누락 될 수 있습니다.매개 변수없는 생성자가없는 클래스에서 Protobuf-Net을 사용할 수 있습니까?

매개 변수없는 생성자를 사용하는 클래스는 필요하지 않습니다. 내가 사용할 수있는 어떤 종류의 속성이나 다른 기법이 있습니까?

답변

13

protobuf-net은 현재 매개 변수없는 생성자가 작동하는 데 달려 있습니다.

그러나 해당 생성자는 public (it will use reflection if need be to invoke it) 일 필요가 없으므로 protobuf-net (이유에 대한 설명 추가)에서 사용하기 위해 필요한 개인용 생성자를 정의하고 특정 직렬화 관련 문제를 처리 할 수 ​​있습니다.

이는 '불법'인스턴스를 생성 할 수있는에서 API의 나머지 부분을 유지합니다.

Marc는 가장 바깥 쪽 메시지 객체에 대해 이야기하는 경우 객체를 직접 만들고 Serializer.Merge를 호출 할 수 있다고 지적했습니다. 그러나 객체를 생성해야하는 경우 (현재 인스턴스가 null이거나 목록/배열의 새 항목이기 때문에) 기본 생성자를 찾습니다.

+0

매개 변수없는 생성자가 언제 호출됩니까? 다른 필드가 업데이트되기 전에? – mcmillab

4

ShuggyCoUk는 매개 변수가없는 생성자를 사용하는 방법에 대한 권리입니다.

메시지 개체의 경우 메시지 개체의 경우 사용자가 직접 개체를 만들고 Serializer.Merge을 호출 할 수 있습니다. 그러나 객체를 생성해야하는 경우 (현재 null 인스턴스가 있거나 목록/배열의 새 항목에 대해) 기본 생성자를 찾습니다.

나는 또한 "단지 FormatterServices를 통해 원시 객체를 생성 '라고하는 속성의 일부 마크 업을 제공 할 수을 가정 , 그러나 이것은 (개인 매개 변수가없는 생성자와 비교) 불필요한 느낌, 그리고 모든 플랫폼에서 작동하지 않을 수 있습니다 (Silverlight, CF 등 - 가능성이있는 문제 임).

+0

요즘 사용 가능한 SkipConstructor 옵션을 사용하여 수행 한 작업 ('FormatterServices')이 맞습니까? – DeCaf

+0

@DeCaf 예, 그렇습니다. –

관련 문제