C# 反序列化Xml文档错误
当我将xml反序列化到对象列表中时,我遇到了一个问题。今天早上我在网上搜索了一下,但是我的问题没有解决 反序列化方法C# 反序列化Xml文档错误,c#,xml,xml-deserialization,C#,Xml,Xml Deserialization,当我将xml反序列化到对象列表中时,我遇到了一个问题。今天早上我在网上搜索了一下,但是我的问题没有解决 反序列化方法 public static List<FileAction> DeSerialization() { XmlRootAttribute xRoot=new XmlRootAttribute(); xRoot.ElementName="ArrayOfSerializeClass"; xRoot.IsNullable=true; XmlSe
public static List<FileAction> DeSerialization()
{
XmlRootAttribute xRoot=new XmlRootAttribute();
xRoot.ElementName="ArrayOfSerializeClass";
xRoot.IsNullable=true;
XmlSerializer serializer = new XmlSerializer(typeof(List<FileAction>),xRoot);//, new XmlRootAttribute("ArrayOfSerializeClass")
using (Stream streamReader = File.OpenRead(@"C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml"))//FileStream fs =new FileStream(xmlPath,FileMode.Open)
{
using (XmlReader reader = XmlReader.Create(streamReader))
{
int count =0;
List<FileAction> serialList2 = (List<FileAction>)serializer.Deserialize(reader);
return (List<FileAction>)serializer.Deserialize(reader);
}
}
公共静态列表反序列化()
{
xRoot=新的XmlRootAttribute();
xRoot.ElementName=“ArrayOfSerializeClass”;
xRoot.IsNullable=true;
XmlSerializer serializer=新的XmlSerializer(typeof(List),xRoot);/,新的XmlRootAttribute(“ArrayOfSerializeClass”)
使用(streamReader=File.OpenRead(@“C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml”)//FileStream fs=new FileStream(xmlPath,FileMode.Open)
{
使用(XmlReader=XmlReader.Create(streamReader))
{
整数计数=0;
List serialList2=(列表)序列化程序。反序列化(读取器);
返回(列表)序列化程序。反序列化(读取器);
}
}
调用方法
String resultPath = @"C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml";
if (!File.Exists(resultPath))
{
XmlSerializer xs = new XmlSerializer(typeof(List<SerializeClass>));
using (FileStream fileStream = new FileStream(@"C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml", FileMode.Create))
{
xs.Serialize(fileStream, serializeList);//seri
fileStream.Close();
}
Console.WriteLine("Succesfully serialized to XML");
}
else
{
//string path= @"C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml";
DeSerialization();
XmlSerializer xs = new XmlSerializer(typeof(List<SerializeClass>));
FileStream fs = new FileStream(@"C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml", FileMode.Append, FileAccess.Write);
using (XmlWriter xwr = XmlWriter.Create(fs))//TextWriter xwr = new StreamWriter
{
xs.Serialize(xwr, serializeList);//seri
//fs.Close();
}
Console.WriteLine("Succesfully serialized to XML");
}
return serializeList;
String resultPath=@“C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml”;
如果(!File.Exists(resultPath))
{
XmlSerializer xs=新的XmlSerializer(typeof(List));
使用(FileStream FileStream=new FileStream(@“C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml”,FileMode.Create))
{
Serialize(fileStream,serializeList);//seri
fileStream.Close();
}
WriteLine(“成功序列化为XML”);
}
其他的
{
//字符串路径=@“C:\serialization\SerializationWithFileWatcher\Output\XMLSerializate.xml”;
反序列化();
XmlSerializer xs=新的XmlSerializer(typeof(List));
FileStream fs=newfilestream(@“C:\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml”,FileMode.Append,FileAccess.Write);
使用(XmlWriter xwr=XmlWriter.Create(fs))//TextWriter xwr=new StreamWriter
{
Serialize(xwr,serializeList);//seri
//fs.Close();
}
WriteLine(“成功序列化为XML”);
}
返回列表;
我之所以在这里调用它,是因为我想再次将这个对象添加到xml文件中
错误是XML文档中有一个错误(15,27)
我的Xml结构
<?xml version="1.0"?>
<ArrayOfSerializeClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SerializeClass>
<creationTime>2013-11-25T09:53:25.3325289+05:30</creationTime>
<fileAction>Renamed</fileAction>
<Properties>
<FileAttributes fileName="validate json.txt">
<fileSize>307</fileSize>
<extension>.txt</extension>
<lastAccessTime>2013-11-25T09:53:25.3325289+05:30</lastAccessTime
<fullPath>C:\serialization\SerializationWithFileWatcher\SerializationWithFileWatcherProj\validate json.txt</fullPath>
</FileAttributes>
</Properties>
</SerializeClass>
</ArrayOfSerializeClass>
2013-11-25T09:53:25.3325289+05:30
改名
307
.txt
2013-11-25T09:53:25.3325289+05:30我从上面的代码中了解到,您试图扩展当前XML,方法是首先将其作为FileStream
读取,然后使用XmlWriter
向其添加更多内容
如果我的理解是正确的,那么您正在尝试写入现有XML文件的末尾,这是不允许的,因为任何XML文档只能有一个根节点。在您的情况下,该根节点是ArrayOfSerializeClass
因此,为了成功完成任务,必须将XML附加到根节点中
更新:
此处可能的解决方案:您的XML文件在第15行的字符27处有一个错误。请检查您的XML,如果找不到错误,请发布它。15,27是XML文件的结束元素,我无法从您的问题中真正理解。您是说这--2013-11-25T09:53:25.3325289+05:30重命名为--307.txt20吗13-11-25T09:53:25.3325289+05:30C:\vignesh\serialization\SerializationWithFileWatcher\SerializationWithFileWatcherProj\validate json.txt是您的XML吗?我已经编辑了您的标题。请看“”,其中一致意见是“不,他们不应该”。@Dharinadhakrishnar检查上面“更新”中的链接。