C# 使构造函数仅接受C中具有[Serializable]属性的对象#

C# 使构造函数仅接受C中具有[Serializable]属性的对象#,c#,serialization,constructor,attributes,serializable,C#,Serialization,Constructor,Attributes,Serializable,我希望我的构造函数只接受具有[Serializable]属性的对象 public MyClass(object obj) { } 例如: public MyClass(? obj) { } 在C#中如何实现这一点我想到的第一件事是通过只允许实现ISerializable接口的对象来简化这一点: public MyClass(ISerializable obj) { // ... } 但我觉得这太简单了,不是吗 或者: public MyClass(Object obj) {

我希望我的构造函数只接受具有
[Serializable]
属性的对象

public MyClass(object obj)
{
}
例如:

public MyClass(? obj)
{
}

在C#

中如何实现这一点我想到的第一件事是通过只允许实现
ISerializable
接口的对象来简化这一点:

public MyClass(ISerializable obj)
{
    // ...
}
但我觉得这太简单了,不是吗

或者:

public MyClass(Object obj)
{
    if (!Attribute.IsDefined(obj.GetType(), typeof(SerializableAttribute)))
        throw new ArgumentException("The object must have the Serializable attribute.","obj");

    // ...
}
我认为您甚至可以通过以下方式进行检查:

obj.GetType().IsSerializable;

你确定吗?那个[可序列化]的东西已经很老了,我们现在有更好的方法了。使用反射并在运行时抛出异常。@HenkHolterman您能不能更具体一点?@HenkHolterman关于其他方法?用谷歌搜索“C#serialization”并挑选结果。JSon最近很流行。
obj.GetType()
是反射。呃,我的意思是,不使用Attribute.IsDefined,但我的目标是在编译时限制它。嗯,你不能。绝对没有办法做到这一点。你可以在上面找到两个好的选择。