s とs のModel
リストを含むクラスがあります。Message
Signal
EveryMessage
には 0、1、またはそれ以上のシグナルを含めることができます。ASignal
は同時に 0、1、またはそれ以上のメッセージに含めることができます。XmlSerializer で逆シリアル化するときにメッセージとシグナルの関係を維持するのに問題がありますが、オブジェクトの重複も避けます (私のアプリケーションでは XmlSerializer 以外のものを使用することはできません)。
class Model
{
private MessageCollection messages;
public MessageCollection Messages { get { return messages; } }
private SignalCollection signals;
public SignalCollection Signals { get { return signals; } }
public Model()
{
// the collection classes automatically set the Model property of any
// Messages/Signals added to its appropriate owner (this)
this.messages = new MessageCollection(this);
this.signals = new SignalCollection(this);
}
}
class Message
{
[XmlIgnore] // set by MessageCollection
public Model Model { get; set; }
public List<Signal> Signals
{
get { ??? }
}
}
class Signal
{
[XmlIgnore] // set by SignalCollection
public Model Model { get; set; }
public List<Message> Messages
{
get { return this.Model.Messages.Where(x => x.Signals.Contains(this)).ToList(); }
}
}
リストにあるように、シグナルのインデックスを含むクラスにaList<uint> SignalIndices
を格納するという考えがありました。ただし、シリアル化/逆シリアル化するときに XmlSerializer がインデックスを台無しにしないと想定しても安全ですか? また、このアプローチは、属性を取得し、リストを使用して別の Linq に依存して、 と同様のことを達成することを意味します。Message
Model.Signals
Message.Signals
[XmlIgnore]
SignalIndices
Signal.Messages
つまり、MessageCollection および SignalCollection クラスで使用されるのと同様の手法を使用して、常にデータの一貫性を確保することは可能ですか (オブジェクト構築の順序が定義されていない逆シリアル化プロセス中も)。 " List<Signal>
Linq を使用しない Message クラスのシグナル ( ) のリスト?