2011-12-14 30 views
0

请看下面的例子声明:OOD在C#中 - 确定哪些属性继承VS这在当前类

public class BaseClass 
{ 
    public string StringInBaseClass {get;set;} 
    public int IntInBaseClass {get;set;} 
} 

public InheritingClass : BaseClass 
{ 
    public long LongInInheritingClass {get;set;} 
    public long ShortInInheritingClass {get;set;} 
    public long CharInInheritingClass {get;set;} 
} 

现在,我想要做的是序列化只是继承属性的JSON字符串。例如,我想以某种方式创建一个JSON对象了刚刚在InheritingClass 3个属性,但如果我这样做:

InheritingClass a = new InheritingClass(); 
JavaScriptSerializer jss = new JavaScriptSerializer(); 
string jsonString = jss.Serialize(a); 

jsonString值将所有的BaseClass的性能以及所有InheritingClass的属性。我知道这很正常,因为我继承了所有这些属性。我期望做的不是包括那些继承的属性,并且只有InheritingClass中的3个属性构建JSON字符串。

这可能吗?

+0

为什么要这么做? – Oded 2011-12-14 19:49:15

+0

听起来更像是一个序列化问题,而不是一个面向对象的设计和多态问题。建议如何禁用`BaseClass`属性的序列化。 – Reddog 2011-12-14 19:51:37

回答

3

在您不想使用JavaScriptSerializer序列化的任何属性上使用ScriptIgnoreAttribute。有了这个,你可以做你的继承类下面从正在连载停止从基类的属性:

public class BaseClass 
{ 
    public virtual string StringInBaseClass {get;set;} 
    public int IntInBaseClass {get;set;} 
} 

public class InheritingClass : BaseClass 
{ 
    [ScriptIgnore] 
    public override string StringInBaseClass 
    { 
     get 
     { 
      return base.StringInBaseClass; 
     } 
     set 
     { 
      base.StringInBaseClass = value; 
     } 
    } 
    public long LongInInheritingClass {get;set;} 
    public long ShortInInheritingClass {get;set;} 
    public long CharInInheritingClass {get;set;} 
} 
0

尤里是如何获得JSON忽略属性正确。

但是,没有办法隐含基类的属性,继承类的基类,这就是继承的工作原理。

1

如果从未希望(序列化基类或其他派生类时甚至)序列化的属性,你可以在ScriptIgnore属性添加到基类:

public class BaseClass 
{ 
    [ScriptIgnore] 
    public string StringInBaseClass {get;set;} 
    [ScriptIgnore] 
    public int IntInBaseClass {get;set;} 
} 
1

此代码返回属性(类型PropertyInfo [])继承成员不考虑:

typeof(InheritingClass).GetProperties(BindingFlags.DeclaredOnly)