2009-08-26 22 views
10

Sử dụng Protobuf-Net, tôi thấy rằng nó dường như không thể deserialize một lớp học mà không có một constructor parameterless hoặc tôi có thể thiếu một cái gì đó?Có thể sử dụng Protobuf-Net với một lớp không có một hàm tạo tham số không?

Tôi không muốn một số lớp học có hàm tạo tham số. Có một số loại thuộc tính mà tôi có thể sử dụng hoặc một số kỹ thuật khác không?

Trả lời

13

protobuf-net phụ thuộc vào việc có một hàm tạo tham số không hoạt động.

Tuy nhiên, hàm tạo không cần công khai (it will use reflection if need be to invoke it) để bạn có thể xác định hàm tạo riêng được yêu cầu chỉ để sử dụng bởi protobuf-net (thêm nhận xét là tại sao) và xử lý các vấn đề liên quan đến tuần tự hóa cụ thể ở đó.

Điều này giúp phần còn lại của api của bạn không thể xây dựng các trường hợp 'bất hợp pháp'.

Marc chỉ ra rằng nếu bạn đang nói về đối tượng thư ngoài cùng, bạn cũng có thể tự tạo đối tượng và gọi Serializer.Merge. Nhưng nếu nó cần tạo một đối tượng (vì nó hiện có một cá thể rỗng, hoặc cho các mục mới trong một danh sách/mảng), thì nó sẽ tìm một hàm tạo mặc định.

+0

khi nào hàm tạo không có tham số được gọi là? Trước khi các trường khác được cập nhật? – mcmillab

4

ShuggyCoUk là đúng về nó bằng cách sử dụng constructor parameterless.

Chỉ để hoàn thành, mặc dù - nếu bạn đang nói về đối tượng tin nhắn ngoài cùng, bạn cũng có thể tự tạo đối tượng và gọi Serializer.Merge. Nhưng nếu nó cần tạo một đối tượng (vì nó hiện có một cá thể null hoặc cho các mục mới trong một danh sách/mảng), thì nó sẽ tìm một hàm tạo mặc định.

tôi giả rằng tôi cũng có thể cung cấp một số đánh dấu trong các thuộc tính để nói "chỉ cần tạo một đối tượng thô qua FormatterServices", nhưng điều này cảm thấy không cần thiết (so với một constructor parameterless tư nhân), và có thể không hoạt động trên tất cả các nền tảng (Silverlight, CF, v.v. - có thể là vấn đề).

+0

Tôi đoán đây là những gì bạn đã làm ('FormatterServices') với tùy chọn SkipConstructor có sẵn trong những ngày này? – DeCaf

+0

@DeCaf có, đó là những gì nó làm –

Các vấn đề liên quan