什么是可与DataContract一起使用的最佳C#可排序序列化列表?

时间:2018-01-23 07:53:09

标签: c# sortedlist sortedset immutable-collections

作为类的一部分,我有一些不可变的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并仍然保持我输出的XML输出吗?

我可以让我的班级不变吗?

或者我最好使用List来简化和LINQ以方便使用?

0 个答案:

没有答案