ReSharper 2026.1 Help

代码检查:冗余的属性使用(冗余的 'SerializeField' 属性)

此检查将在以下情况下将 [SerializeField] 属性标记为冗余:

  • 如果字段同时具有 [SerializeField][NonSerialized] 属性, [NonSeralized] 属性将具有更高优先级,Unity 将忽略 [SerializeField] 属性。 如果某个字段应用了这两个属性, [SerializeField] 属性将被标记为冗余。

  • [SerializeField] 属性应用于无法序列化的字段时(如该字段为 staticreadonly ,或者其所属类无法序列化,例如没有继承自 Unity 基类如 MonoBehaviour ,或是没有 [System.Serializable] 属性的普通 .NET 类),此检查会将该属性标记为冗余。

此检查还提供快速修复功能,可以移除冗余属性。 针对普通 .NET 类,也提供快速修复功能来为该类添加 [System.Serializable] 属性。

备注

请注意,当使用诸如 JsonUtility.ToJson 等显式序列化 API 时,Unity 会序列化带有 [SerializeField] 标记,但未带有 [System.Serializable] 的类中的字段。 但是,如果相同的类被用于 Unity 派生类中的隐式序列化,例如 MonoBehaviour 基类中的字段,则不会序列化该字段。 如果该类只用于显式序列化,则可能会出现错误的冗余属性警告。

这被视为边缘情况——检测某个类是否只用于显式序列化通常不可行,更重要的是在隐式序列化可能失败时发出警告。 该边缘情况的解决方法是使用快速修复功能为类添加 [System.Serializable] 属性。

另请参阅 Unity 有关 SerializeField 的文档。

2026年 5月 8日