The Evidence object acts as a collection for any sort of object that you want to add as evidence for an assembly or AppDomain. (It can get confusing because there is both an Evidence class and objects used as evidence. I’ll capitalize the first one to disambiguate between them). Both the AddHost and AddAssembly methods take object parameters, which can lead to the conclusion that any object can be used as evidence.
However, the CLR does have the requirement that the objects you use for evidence must be serializable, as we will attempt to serialize the entire Evidence collection at various points (such as when you attempt to access the Evidence property of the AppDomain). If unserializable evidence is added to the collection, we won’t complain up front, however SerializationExceptions may start to occur down the line when one of the operations that cause the Evidence collection to serialize is done.
(Incidentally, another property of evidence objects is that they must be non-null. Adding a null object to the Evidence collection can cause potential NullReferenceExceptions down the line.)