我有一个Model
类,其中包含Message
s 和Signal
s 的列表。
每个Message
可以包含 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(); }
}
}
我的想法是将 a 存储List<uint> SignalIndices
在Message
类中,其中包含信号的索引,因为它们在Model.Signals
列表中。但是,假设 XmlSerializer 在序列化/反序列化时不会弄乱索引是否安全?此外,这种方法意味着Message.Signals
获取[XmlIgnore]
属性并依赖另一个使用SignalIndices
列表的 Linq 来实现与Signal.Messages
.
换句话说,是否有可能通过与 MessageCollection 和 SignalCollection 类一起使用的类似技术来始终确保数据一致性(也在反序列化过程中,其中对象构造的顺序未定义),同时还具有“真实"List<Signal>
不使用 Linq 的 Message 类中的信号 ( ) 列表?