Tôi đang tìm một cách dễ dàng để kiểm tra xem một đối tượng trong C# có thể tuần tự hóa không.Làm thế nào để kiểm tra xem một đối tượng có thể tuần tự hóa trong C#
Như chúng ta đã biết bạn thực hiện một đối tượng serializable bởi một trong hai thực hiện giao diện ISerializable hoặc bằng cách đặt [Serializable] ở phía trên cùng của lớp.
Điều tôi đang tìm kiếm là cách nhanh chóng để kiểm tra điều này mà không phải phản ánh lớp học để có được thuộc tính của nó. Giao diện sẽ nhanh chóng sử dụng câu hỏi là câu lệnh.
Sử dụng gợi ý @ Flard đây là mã mà tôi đã đưa ra, tiếng la hét là có cách tốt hơn.
private static bool IsSerializable(T obj)
{
return ((obj is ISerializable) || (Attribute.IsDefined(typeof (T), typeof (SerializableAttribute))));
}
Hoặc thậm chí tốt hơn chỉ nhận được các loại của đối tượng và sau đó sử dụng tài sản IsSerializable vào loại:
typeof(T).IsSerializable
Ghi mặc dù điều này điều này dường như chỉ mới lớp mà chúng ta đang đối phó với nếu lớp có chứa các lớp khác bạn có thể muốn kiểm tra tất cả hoặc thử và tuần tự hóa và đợi các lỗi như @pb chỉ ra.
Xin lỗi thất bại khi một lĩnh vực trong obj không serializable, xem mẫu của tôi . –
Tôi nghĩ đây là cách tiếp cận tốt hơn nhiều: http://stackoverflow.com/questions/236599/how-to-unit-test-if-my-object-is-really-serializable/236698#236698 – xero
Tuyên bố "bạn làm cho một đối tượng có thể tuần tự hóa bằng cách thực hiện giao diện ISerializable hoặc bằng cách đặt [Serializable] ở đầu lớp "là sai. Đối với một đối tượng được serializable, lớp của nó phải khai báo SerializableAttribute. Việc triển khai ISerializable chỉ cho phép bạn kiểm soát nhiều hơn quy trình. – Mishax