Нет, нет способа сделать это для всех типов, которые могут быть сериализуемыми, за исключением, возможно, написания собственного анализатора Roslyn, который применяет точные правила, которые вы хотите, и добавляет предупреждения, которые вы хотите.Это большая работа, и может быть проще добавить модульные тесты / интеграционные тесты, которые охватывают сценарии сериализации, которые вы намереваетесь поддерживать.
Дополнительные примечания:
[Serializable]
является псевдоатрибутом - он фактически отображается на флаг IL, а не на обычную аннотацию атрибута, и, кроме того, он используется только некоторыми сериализаторами (очень не всеми) - сериализаторами, которые используют
ISerializable
/ IFormatter
API - это, как правило, последний сериализатор, который вы хотите использовать для большинства сценариев общего назначения - они, как правило, гораздо более хрупкие и привязаны к типу, чем другие более простительные сериализаторы (json, xml, protobuf и т. Д.)
Означает ли это, что практически каждый объект в .NET может быть сериализован?
Нет.Тем не менее, разные сериализаторы имеют разные правила, когда вещи могут быть сериализованы, и эти правила часто бывают множественными и разнообразными ... т.е. они могут выглядеть как X или как Y или как Z. Таким образом, единственный API, который принимает все 3: object