如何在特定父节点内的XM​​L中添加子元素?

时间:2010-07-19 11:41:06

标签: c# xml serialization

我已经序列化了以下日志类:

[Serializable]
[XmlRoot("Log")]
public class Log
{
    [XmlElement("ErrorLog")]
    public ErrorLog Error { get; set; }


    [XmlElement("MessageLog")]
    public MessageLog Message { get; set; }
}

public class ErrorLog
{
    [XmlElement("ErrorMessage")]
    public string ErrorMessage { get; set; }

    [XmlElement("Module")]
    public string Module { get; set; }

    [XmlElement("Component")]
    public string Component { get; set; }
}

public class MessageLog
{
    [XmlElement("Message")]
    public string Message { get; set; }

    [XmlElement("Module")]
    public string Module { get; set; }
}

我将XML文件中的上述Log类序列化为:

    ABC     TestClient的   

    ABC     TestClient的     DataAccessLayer   

是否有可能在单个根目录中添加所有元素,无论它们是ErrorLogs还是MessageLogs,如:         ABC     TestClient的     DataAccessLayer           ABC     TestClient的   

1 个答案:

答案 0 :(得分:1)

您可以创建BaseLog课程并在List<BaseLog>内声明LogMesageLogErrorLog应继承自BaseLog

顺便说一下,如果XmlElement与属性名称具有相同的值,则不需要将XmlElement属性应用于属性。请为记录器投入一些时间,例如log4net

我认为将日志保留为XML不是最佳做法(而是使用纯文本文件)。由于应用程序每秒都会崩溃,因此几乎每次出现新消息时都应该刷新日志文件。使用普通文件很容易(当你在最后的文件之后写字节时)和使用xml很难,因为你必须在结束标记之前写。