我已经读过它,而且看起来很简单,但是我不知道为什么它每次在XmlSerializer Line上崩溃,我想知道为什么为什么人们用类似的方式回答了将列表转换为xml的问题,但它并没有似乎不适合我!
这是代码:
班级 :
[Serializable()]
public class Pogos
{
public string Pogo { get; set; }
public DateTime Date { get; set; }
}
每日pogo清单:
public static List<Pogos> DailyPogos = null;
将每日Pogo列表设置为.xml中的内容
public static void SetDailyPogos()
{
string path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/DailyPogos.xml");
if (File.Exists(path))
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Pogos>));
StreamReader reader = new StreamReader(path);
DailyPogos = (List<Pogos>)serializer.Deserialize(reader);
reader.Close();
foreach (var pogo in DailyPogos)
{
if (pogo.Date.Date != DateTime.Now.Date)
DailyPogos.Remove(pogo);
}
}
else
DailyPogos = new List<Pogos>();
}
将每日Pogos(不同)保存在.xml中
public static void SaveDailyPogos(List<string> pogos)
{
foreach (var pogo in pogos)
{
var matches = DailyPogos.Where(e => e.Pogo.Contains(pogo));
foreach ( var match in matches)
{
DailyPogos.Remove(match);
}
var pog = new Pogos();
pog.Pogo = pogo;
pog.Date = DateTime.Now;
DailyPogos.Add(pog);
}
string path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/DailyPogos.xml");
//create the serialiser to create the xml
XmlSerializer serialiser = new XmlSerializer(typeof(List<Pogos>));
// Create the TextWriter for the serialiser to use
TextWriter filestream = new StreamWriter(path);
//write to the file
serialiser.Serialize(filestream, DailyPogos);
// Close the file
filestream.Close();
}
引起麻烦的行(没有错误只会崩溃):
XmlSerializer serializer = new XmlSerializer(typeof(List<Pogos>));
编辑:在这种情况下,我很笨,首先,我可以通过添加一个尝试捕获来监视异常,我不知道为什么我没有。可能很累。例外是因为应用程序的保护级别而失败,该保护级别是通过在程序类中添加“ public”来修复的。
我无法重现您声称看到的异常-鉴于Pogo
该类是您所说的,new XmlSerializer(typeof(List<Pogos>))
因此不会抛出异常。
您应该仔细检查该类是否是公共的,并且在实际的应用程序中具有公共的无参数构造函数。如果没有,那么new XmlSerializer(typeof(List<Pogos>))
的确会引发异常。
就是说,在创建的调用附近有两个编码错误XmlSerializer
,即您正在修改DailyPogos
集合,同时使用一条foreach
语句枚举该集合。如文档中所述,这将引发异常:
IEnumerator.MoveNext Method ()
异常:InvalidOperationException:在创建枚举器后修改了集合。
为了避免这些异常,可以使用List.RemoveAll()
。修改SetDailyPogos()
如下:
XmlSerializer serializer = new XmlSerializer(typeof(List<Pogos>));
using (var reader = new StreamReader(path))
{
DailyPogos = (List<Pogos>)serializer.Deserialize(reader);
}
var now = DateTime.Now;
DailyPogos.RemoveAll(p => p.Date.Date != now.Date);
和SaveDailyPogos()
:
foreach (var pogo in pogos)
{
DailyPogos.RemoveAll(p => p.Pogo.Contains(pogo));
var pog = new Pogos();
pog.Pogo = pogo;
pog.Date = DateTime.Now;
DailyPogos.Add(pog);
}
由于这些foreach
语句引发的异常发生在构造的调用附近,因此XmlSerializer
您可能会误认为异常的来源了吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句