在C#中删除继承对象的属性

时间:2011-12-22 21:16:20

标签: c# oop serialization

如果我有一个复杂的对象,我可以继承它并删除忽略某些属性吗?

如果您不关心为什么我想这样做,请随时提交答案。

如果你照顾,你可以阅读this question。总结一下,我有一个对象有一个可序列化的属性,我想序列化整个对象。有问题的对象是System.Exception

为了解决这个问题,我想简单地创建自己的JsonException对象,继承基础(System.Exception)的所有可爱属性,除了删除(或清空)丑小鸭({{1 }})。

类似的东西:

Exception.TargetSite

另外请记住,我坚持使用.NET 2.0,如果不需要,我真的不想使用自定义序列化程序(如Json.NET)。

3 个答案:

答案 0 :(得分:5)

请参阅“定义异常类”段落中的here,了解如何创建自定义可序列化异常。

文章的相关部分:

[Serializable()]
public class InvalidDepartmentException : System.Exception
{
    public InvalidDepartmentException() : base() { }
    public InvalidDepartmentException(string message) : base(message) { }
    public InvalidDepartmentException(string message, System.Exception inner) : base(message, inner) { }

    // A constructor is needed for serialization when an
    // exception propagates from a remoting server to the client. 
    protected InvalidDepartmentException(System.Runtime.Serialization.SerializationInfo info,
        System.Runtime.Serialization.StreamingContext context) { }
}

答案 1 :(得分:1)

您是否在不重写TargetSite属性的情况下尝试了?我能够做到(但不是2.0,所以我不确定它是否适合你这样

public class MyException : Exception
{
    public new System.Reflection.MethodBase TargetSite
    {
        get { return null; }
    }

    public MyException() : base()
    {

    }
}

答案 2 :(得分:0)

您是否尝试过使用IgnoreDataMemberAttributeNonSerializedAttribute

[IgnoreDataMember]
// or
[NonSerialized]
public override System.Reflection.MethodBase TargetSite
{
    // ...
}