我有一個Model
類,其中包含Message
s和Signal
s的列表。當Xml(De)序列化時維護多對多關係
每個Message
可以包含0個,1個或多個信號。 A Signal
可以同時包含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(); }
}
}
我有想法存儲List<uint> SignalIndices
在Message
類,它包含了信號的指標,因爲它們是在Model.Signals
列表。但是,假設XmlSerializer在序列化/反序列化時不會弄亂索引是否安全?此外,這種方法意味着Message.Signals
獲取[XmlIgnore]
屬性,並依賴於使用SignalIndices
列表的另一個Linq,以實現與Signal.Messages
類似的事情。
換句話說,是否有可能通過與MessageCollection和SignalCollection類一起使用的類似技術來確保所有時間的數據一致性(也是在反序列化過程中,其中對象構造的順序未定義),同時在不使用Linq的Message類中有一個「真實」的信號列表(List<Signal>
)?
我不確定爲什麼我沒有這個想法,因爲我在數據庫中也完成了這個想法。儘管我沒有額外的單身人士課程,但我只是通過將ID僅添加到信號並在消息中具有SignalID列表來實現它。 Singleton方法基本上就是我的版本,但與所有消息交叉。起初我並沒有這麼做,因爲Message.Signals和Signal.Message都是Linqed,但我對Linq的性能再次感到驚訝。儘管如此,我寧願在反序列化的時候將結果「緩存」在實際列表中... – dialer
可能是更好的方法。序列化和反序列化singletons總是有點噩夢。 –