我创建了这个类,它将附加到名为Email Alerts h1,body和id的XML中。但是,我从一开始就运行此文件时遇到问题(当我调用LoadFromFile时),当文件不存在时 - 所以我们必须创建一个文件并开始记录它。
public class EMailAlert
{
public string h1 { get; set; }
public string body { get; set; }
public string idList { get; set; }
public void Save(string fileName)
{
using (var stream = new FileStream(fileName, FileMode.Create))
{
var XML = new XmlSerializer(typeof(EMailAlert));
XML.Serialize(stream, this);
}
}
public static EMailAlert LoadFromFile(string fileName)
{
if (!File.Exists(fileName))
{
var file = new FileInfo(fileName);
file.Directory.Create();
var xmlFile = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XComment("Email Logger"));
xmlFile.Add(new XElement("EmailAlerts"));
xmlFile.Save(fileName);
}
using (var stream = new FileStream(fileName, FileMode.Open))
{
var XML = new XmlSerializer(typeof(EMailAlert));
return (EMailAlert)XML.Deserialize(stream);
}
}
}
当我运行此代码时(没有xml文件 - 因此它会创建一个XML文件,然后它会抛出此错误{"<EmailAlerts xmlns=''> was not expected."}
以下是xml文件的外观
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Email Logger-->
<EmailAlerts />
当我调用LoadFromFile时,不确定为什么它不会发回空的EmailAlert。
答案 0 :(得分:3)
您需要将所有EMailAlerts的集合类型序列化为有效的xml。
以下代码执行此操作。通过创建一个静态助手类来保存我们所有EmailAlerts的静态列表。它还有Load和Save方法,用于读取和写入文件,并使用属性Alerts来获取或存储EmailAlerts。
如果要控制序列化,可以在EmailAlert类上使用attributes。请参阅this answer如何做到这一点。
public static class EMailAlerts
{
static XmlSerializer XML = new XmlSerializer(typeof(List<EMailAlert>));
public static List<EMailAlert> Alerts { get; private set; }
public static void Save(string fileName)
{
using (var stream = new FileStream(fileName, FileMode.Create))
{
XML.Serialize(stream, Alerts);
}
}
public static void LoadFromFile(string fileName)
{
if (!File.Exists(fileName))
{
Alerts = new List<EMailAlert>();
}
else
{
using (var stream = new FileStream(fileName, FileMode.Open))
{
Alerts = (List<EMailAlert>)XML.Deserialize(stream);
}
}
}
}
public class EMailAlert
{
public string h1 { get; set; }
public string body { get; set; }
public string idList { get; set; }
}
class Program
{
static void Main(string[] args)
{
EMailAlerts.LoadFromFile("tmp.xml");
EMailAlerts.Alerts.Add(new EMailAlert{ body="foo"});
EMailAlerts.Save("tmp.xml");
}
}