假设我需要对一个名为Car的类进行分级序列化,比如:内部级别和公共级别。公共级别中的一些属性不应该被序列化,因为它们是内部的。
目前我能想到的“最简单”的方法是使用继承:
然后我可以:
ToSerialize()的结果由一个框架(我无法控制)接收并序列化为JSON或XML。
为了简单起见,我省略了XML序列化属性。
这感觉像是一种黑客行为,而黑客只能带你走那么远。有更好的方法(方式?)来实现这个吗?
我想现在很清楚了,但我想避免编写自己的JSON和XML序列化方法。
提前致谢 Tymek
==编辑
澄清一下,我想能够序列化多个级别:
而且
这使得Car0..3类非常简单,只包含属性,易于维护和理解。
目前我能想到的“最简单”的方法是使用继承:
class CarPublic {
public int PropX {get;set}
}
class CarInternal: CarPublic {
public string PropY {get;set}
}
然后我可以:
object ToSerialize() {
CarInternal car = GetCar();
if( level == Level.Public ) {
return car as CarPublic;
} else {
return car;
}
}
ToSerialize()的结果由一个框架(我无法控制)接收并序列化为JSON或XML。
为了简单起见,我省略了XML序列化属性。
这感觉像是一种黑客行为,而黑客只能带你走那么远。有更好的方法(方式?)来实现这个吗?
我想现在很清楚了,但我想避免编写自己的JSON和XML序列化方法。
提前致谢 Tymek
==编辑
澄清一下,我想能够序列化多个级别:
class Car0 {
public int PropA {get;set}
}
class Car1: Car0 {
public string PropB {get;set}
}
class Car2: Car1 {
public int PropC {get;set}
}
class Car3: Car2 {
public string PropD {get;set}
}
而且
object ToSerialize( Level level ) {
Car3 car = GetCar();
switch( level ) {
case Level.Zero: return car as Car0;
case Level.One: return car as Car1;
case Level.Two: return car as Car3;
case Level.Three: return car as Car4;
}
return null;
}
== 选择的方法
我选择了Marc Gravell的答案作为最佳答案,因为它提供了有关C#及其“标准”组件如何支持我所要求的内容的通用信息。
不过,我认为解决我的问题的最佳方法是使用上述示例中显示的代理类,并将该类以多级模式进行序列化,使用如下所示的方法。
public interface ICar {
Car0 As0();
Car1 As1();
Car2 As2();
Car3 As3();
...
}
这使得Car0..3类非常简单,只包含属性,易于维护和理解。