C# 具有特定属性的类的扩展

C# 具有特定属性的类的扩展,c#,attributes,C#,Attributes,我想为任何具有特定属性的类提供一个扩展方法 为了澄清,我必须自己对对象进行序列化。但我只想序列化具有此自定义属性的对象。 我知道我可以通过从另一个基类继承来实现,但是我已经有了class属性,我认为它会更优雅,因此您可以随时查看对象是否可以自定义序列化 比如: [CustomAttribut]public MyClass{} MyClass o = new MyClass() ; // should only exist if class has attribut CustomAttribu

我想为任何具有特定属性的类提供一个扩展方法

为了澄清,我必须自己对对象进行序列化。但我只想序列化具有此自定义属性的对象。 我知道我可以通过从另一个基类继承来实现,但是我已经有了class属性,我认为它会更优雅,因此您可以随时查看对象是否可以自定义序列化

比如:

[CustomAttribut]public MyClass{} 

MyClass o = new MyClass() ;
// should only exist if class has attribut CustomAttribut. 
O.CustomSerialize();

属性用于存储元数据,这些元数据是静态的、常量的,在编译时是已知的。他们不能将方法/字段添加到类中-接口用于这样做。您可以做的是创建一个接口:

public interface ICustomSerializable{
    string CustomSerialize();
}
另一个选项是将类与序列化逻辑分离。序列化将由另一个类处理。例如:

public class CustomSerializer{

   public string CustomSerialize(object myObject){
       // for example if object has no CustomAttribut attribute 
       // you can throw "not serializable" exception here.

   }
}

属性用于存储元数据,这些元数据是静态的、常量的,在编译时是已知的。他们不能将方法/字段添加到类中-接口用于这样做。您可以做的是创建一个接口:

public interface ICustomSerializable{
    string CustomSerialize();
}
另一个选项是将类与序列化逻辑分离。序列化将由另一个类处理。例如:

public class CustomSerializer{

   public string CustomSerialize(object myObject){
       // for example if object has no CustomAttribut attribute 
       // you can throw "not serializable" exception here.

   }
}

使用plain.NET无法做到这一点。它被称为AOP或


有一些第三方提供商提供了这些选项。

您无法使用plain.NET实现这一点。它被称为AOP或


有一些第三方提供商提供这些选项。

您已经尝试了什么?我没有找到好的解决方案。唯一的问题是通过使用此扩展从另一个类继承。您已经尝试了什么?我没有找到一个好的解决方案。唯一的事情是通过使用此扩展从另一个类继承。您有没有关于postsharp的示例?在这种情况下,postsharp是一种过分的做法(除非您有大量用
[CustomAttribute]
注释的类,并且您知道自己在做什么)你有没有关于postsharp的例子?在这种情况下,postsharp是一种过度杀伤力(除非你有大量用
[CustomAttribute]
注释的类,并且你知道你在做什么),这是不令人满意的,不是你的答案,谢谢你,我的意思是有一个限制。但是我想我会使用这个界面,没关系。这不令人满意,不是你的答案,谢谢你,我的意思是有一个限制。但是我想我会使用这个界面,没关系。