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

问题描述:

我已经序列化以下日志类:如何在特定父节点内的XM​​L中添加子元素?

[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文件为:

ABC TestClient的

ABC TestClient的 DataAccessLayer

难道我添加的所有元素无论是ErrorLogs或MessageLogs单根内,如: ABC TestClient的 DataAccessLayer ABC测试客户端

您可以在Log的内部创建BaseLog类和声明List<BaseLog>MesageLogErrorLog应该BaseLog

顺便说继承,就没有必要XmlElement属性应用到的属性,如果有XmlElement的值相同属性名称。请投入一些时间为记录器,如log4net

我想保持日志为XML不是最佳实践(使用纯文本文件)。由于应用程序可能每秒崩溃,因此几乎每次出现新消息时都应刷新日志文件。使用普通文件(在最后一个字节后面写字节)和使用xml很难,因为必须在结束标记之前写入。