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 hay không.
Như chúng ta biết, bạn làm cho một đối tượng có thể tuần tự hóa bằng cách triển khai giao diện ISerializable hoặc bằng cách đặt [Serializable] ở đầu lớp.
Những gì tôi đang tìm kiếm là một cách nhanh chóng để kiểm tra điều này mà không cần phải phản ánh lớp để lấy các thuộc tính của nó. Giao diện sẽ nhanh chóng bằng cách sử dụng câu lệnh is .
Sử dụng gợi ý của @ Flard, đây là mã mà tôi đã nghĩ ra, hét lên là có cách nào tốt hơn không.
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ỉ cần lấy loại của đối tượng và sau đó sử dụng thuộc tính IsSerializable trên loại:
typeof(T).IsSerializable
Hãy nhớ rằng điều này dường như chỉ dành cho lớp mà chúng ta đang xử lý nếu lớp đó chứa các lớp khác mà bạn có thể muốn kiểm tra tất cả hoặc thử tuần tự hóa và chờ lỗi như @pb đã chỉ ra.