2012-03-27 14 views
1

私は、さまざまな用途で同様のデータを格納する複数のクラスを持っています。それらは同じ基本クラスに基づいており、すべてのデータをXMLにシリアル化したいと思いますが、シリアル化します。これはC#です。基本クラスのXMLElement名のオーバーライド

コードを読みやすく、実装が簡単になるように、クラス名を使用します。

public BaseMenuItem 
{ 
    public string ItemName; 
    public string ItemDescription 
    public string ItemAssetName; 
    public List<BaseMenuItem> SubMenuItems; 
} 

他の項目を継承し、異なる要素名でシリアル化します。 私は現在、基底クラスを持たない別のクラスを持っていますが、同じ基底クラスを使用すると、実装が簡単になり、拡張が容易になりますので、定義した変数のオーバーライド要素名を達成する方法が少し失われます基本クラス

+0

どのシリアライザを使用していますか? –

+0

私はSystem.Xml.Serializerを使用しています とXmlSerializerクラス – michael

+0

実際には、基底クラスによってコードが密接に結合され、変更が難しくなります。 –

答えて

3

この場合、「基本クラス要件」は、提供している値よりも痛みが増していると言います。

基本クラスのみを使用してコードを保存する場合、つまり、サブクラスに追加のプロパティを追加したくない場合は、もしそうならベースクラスを与えて削除してください。各サブクラスに余分な行を追加するという犠牲を払っても、痛みが少なくなります。

プログラミング上の理由からベースクラスが必要な場合は、例えば、操作はベースクラス(特に多型)で実行されます。基本クラスの代わりにインタフェースを使用します。

どちらかの方法でベースクラスを削除します。

0

残念ながら、使用しているシリアライザではこれを行うことはできません。これらの「デフォルトの」.NETシリアライザは柔軟性が低く、遅く、一般的な状況でのみ有用です。

クラスのプロパティではなく、別のシリアライザを試したり、継承を使用したりできます。あなたが名前を変更したい要素がたくさんある場合、これはあまり役に立ちません。

実際、私は今これについて確信していません。私はそれについてもっと確信しているときに更新します、私は同じ問題があります。

関連する問題