Предположим, мне нужно сериализовать объект класса Car по уровням, например. Внутренний и общественный.Некоторые свойства на общедоступном уровне не следует сериализовать, поскольку они являются внутренними.
На данный момент «самый простой» способ, который я могу придумать для достижения этого, - использовать наследование:
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
== EDIT
Чтобы уточнить, я хочу иметь возможность сериализовать несколько уровней:
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;
}
== Выбранный подход
Я отметил ответ Марка Гравелла как ответ, поскольку он обеспечивает общая информация о том, как C # и его «стандартные» компоненты поддерживают то, о чем я просил.
Однако я думаю, что лучший подход к моей проблеме - использовать прокси-классы, как показано выше, и сериализуйте класс в этом многоуровневом шаблоне с помощью методов, как показано ниже.
public interface ICar {
Car0 As0();
Car1 As1();
Car2 As2();
Car3 As3();
...
}
Это позволяет сохранять классы Car0..3 очень простыми, с одними только свойствами, для обслуживания и понимания.