Json.NET supports pretty much all types, even those without any custom attributes. Among supported attributes are DataContract, JsonObject, Serializable. There're numerous ways to make Json.NET include a member in serialization and numerous to make it skip. If you can't serialize some class, it's more likely caused by issues other than lack of Data* attributes: members throwing exceptions, missing constructors, faulty converters, visibility issues etc. Your error messages are unlikely to be more helpful than those provided by Json.NET.
You'll have to replicate crazy amounts of logic from Json.NET if you want to test beforehand. Checking type and member attributes won't be enough. Just verifying a converter used for a property would require checking five places at least. And even if you do all this work, it will be not enough, because in a new version, a new type or converter or feature or attribute will be introduced in Json.NET and you'll have to do all this again.
The only reliable way to test wether a type can be serialized is to try to serialize it.