作为一个类的一部分,我有一些不可变的 POCO 对象只是作为配置文件的数据传输对象。
[DataMember]
public IReadOnlyList<Message> Messages { get; } = new List<Message>()
{
new Warning(75, "UserMessage1", "LogMessage1"),
new Warning(90, "UserMessage2", "LogMessage2"),
new Error(100, "UserMessage3", "LogMessage3")
};
信息
abstract class Message
{
protected Message(LogLevel logLevel, int percentUsed, string userMessage, string logMessage)
{
this.LogLevel = logLevel;
this.PercentUsed = percentUsed;
this.UserMessage = userMessage;
this.LogMessage = logMessage;
}
LogLevel LogLevel { get; }
[DataMember]
int PercentUsed { get; }
[DataMember]
string UserMessage { get; }
[DataMember]
string LogMessage { get; }
}
[DataContract]
internal sealed class Warning : Message
{
public Warning(int percentUsed, string userMessage, string logMessage) : base(LogLevel.Warn, percentUsed, userMessage, logMessage)
{
}
}
[DataContract]
internal sealed class Error : Message
{
public Error(int percentUsed, string userMessage, string logMessage) : base(LogLevel.Error, percentUsed, userMessage, logMessage)
{
}
}
我希望能够将其序列化为以下 XML(或者将来可能是 JSON?)
<Messages>
<Warning>
<PercentageUsed>75</PercentageUsed>
<UserMessage>UserMessage1</UserMessage>
<LogMessage>LogMessage1</LogMessage>
</Warning>
<Warning>
<PercentageUsed>90</PercentageUsed>
<UserMessage>UserMessage2</UserMessage>
<LogMessage>LogMessage2</LogMessage>
</Warning>
<Error>
<PercentageUsed>100</PercentageUsed>
<UserMessage>UserMessage3</UserMessage>
<LogMessage>LogMessage3</LogMessage>
</Error>
</Messages>
稍后我将使用此配置来制作一个排序列表,以便我可以针对已使用的磁盘空间量获取适当的警告和日志级别。例如,我使用了 77% 的磁盘空间,从排序列表中获取适当的错误消息 (75%)。
我可以让 List 使用 SortedList 并仍然使用 DataContract 维护我正在寻找的 XML 输出吗?
我可以保持我的类不可变吗?
还是为了简单起见,我最好使用 List 并为了易于使用而使用 LINQ?