在xml列表中添加和删除项目

时间:2014-06-04 14:14:39

标签: c# xml logging serialization

我已经创建了一个小的logg程序,我可以将自定义类保存到xml,然后将它们从xml转换回类。这工作正常,但问题是如果我想在xml中的列表中添加一个类,我必须阅读所有这些,添加一个类并重写所有这些如果我使用此方法,现在我知道我可以manualy通过搜索元素等添加一个类,但我想知道我是否可以按照我编写所有这些的方式来执行此操作。

这是我使用的代码示例:

public static void Test()
    {
        List<LoggInformation> infos = new List<LoggInformation>();

        infos.Add(new LoggInformation() { Level = BpuInterface.BpuInterface.BPUController.LoggLevel.Debug, Message = "error1" });

        infos.Add(new LoggInformation() { Level = BpuInterface.BpuInterface.BPUController.LoggLevel.Error, Message = "error2" });

        DataContractSerializer dd = new DataContractSerializer(typeof(List<LoggInformation>));

        using (var writer = new StreamWriter(@"C://testLoggfile.xml"))
        {
            dd.WriteObject(writer.BaseStream, infos);
        }
    }

    public static void AddOneItem()
    {
        //??????????
    }

    [DataContract]
    public class LoggInformation
    {
        [DataMemberAttribute]
        public BpuInterface.BpuInterface.BPUController.LoggLevel Level { get; set; }

        [DataMemberAttribute]
        public Source Source { get; set; }

        [DataMemberAttribute]
        public string ExceptionMessage { get; set; }

        [DataMemberAttribute]
        public string ExceptionStack { get; set; }

        [DataMemberAttribute]
        public string ThreadName { get; set; }

        [DataMemberAttribute]
        public System.Threading.ApartmentState ThreadApartmentState { get; set; }

        [DataMemberAttribute]
        public string Message { get; set; }

        [DataMemberAttribute]
        public DateTime DateTime { get; set; }

    }

1 个答案:

答案 0 :(得分:1)

您可以使用此代替new StreamWriter(@"C://testLoggfile.xml"), true)将在文件末尾附加行。

 public static void Test()
    {
...
        using (var writer = new StreamWriter(@"C://testLoggfile.xml"), true) // this will append line at the end of file.
        {
            dd.WriteObject(writer.BaseStream, infos);
        }
    }
...