【发布时间】:2017-12-14 17:19:07
【问题描述】:
每次收到用户的请求时,我都必须将其序列化并附加到现有的 xml 文件中,如下所示:
<LogRecords>
<LogRecord>
<Message>Some messagge</Message>
<SendTime>2017-12-13T22:04:40.1109661+01:00</SendTime>
<Sender>Sender</Sender>
<Recipient>Name</Recipient>
</LogRecord>
<LogRecord>
<Message>Some message too</Message>
<SendTime>2017-12-13T22:05:08.5720173+01:00</SendTime>
<Sender>sender</Sender>
<Recipient>name</Recipient>
</LogRecord>
</LogRecords>
目前以这种方式序列化数据(效果很好):
var stringwriter = new StringWriter();
var serializer = new XmlSerializer(object.GetType());
serializer.Serialize(stringwriter, object);
var smsxmlStr = stringwriter.ToString();
var smsRecordDoc = new XmlDocument();
smsRecordDoc.LoadXml(smsxmlStr);
var smsElement = smsRecordDoc.DocumentElement;
var smsLogFile = new XmlDocument();
smsLogFile.Load("LogRecords.xml");
var serialize = smsLogFile.CreateElement("LogRecord");
serialize.InnerXml = smsElement.InnerXml;
smsLogFile.DocumentElement.AppendChild(serialize);
smsLogFile.Save("LogRecords.xml");
还有属性类
[XmlRoot("LogRecords")]
public class LogRecord
{
public string Message { get; set; }
public DateTime SendTime { get; set; }
public string Sender { get; set; }
public string Recipient { get; set; }
}
但我想要做的是加载文件,导航到它的最后一个元素/节点并附加一个新的List<LogRecord> 并保存,这样我以后可以轻松地反序列化。
我尝试了各种使用 XPath 选择方法的方法,例如 SelectSingleNode 和 SelectNodes,但由于我是 c# 的初级人员,所以我无法让它们正常工作。有谁知道如何正确序列化和追加?
谢谢
【问题讨论】:
-
反序列化什么?如果是所有数据,那么use a list。如果只有最后一个元素,则使用列表(原文如此!)并从中取出最后一个元素。或者在循环中使用
ReadToFollowing,直到到达最后一个元素。