1

作为一个类的一部分,我有一些不可变的 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?

4

0 回答 0