c#反序列化Xml文档错误 [英] c# Deserialization Xml Document Error
本文介绍了c#反序列化Xml文档错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我将xml反序列化为对象列表时,我遇到了问题。我今天早上在网上搜索了,但我的问题没有解决。
反序列化方法
public < span class =code-keyword> static List< fileaction> DeSerialization()
{
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = ArrayOfSerializeClass;
xRoot.IsNullable = true ;
XmlSerializer serializer = new XmlSerializer( typeof (List< fileaction>),xRoot); < span class =code-comment> // ,new XmlRootAttribute(ArrayOfSerializeClass)
using (Stream streamReader = File.OpenRead( @ C:\ _vignesh \\ \\ serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml)) // FileStream fs = new FileStream(xmlPath,FileMode.Open)
{
使用(XmlReader reader = XmlReader.Create(streamReader))
{
int count = 0 ;
List< fileaction> serialList2 =(List< fileaction>)serializer.Deserialize(reader);
return (List< fileaction>)serializer.Deserialize(reader);
}
}
通话方式
字符串 resultPath = @ C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml跨度>;
if (!File.Exists(resultPath))
{
XmlSerializer xs = 新 XmlSerializer( typeof (List< serializeclass>));
使用(FileStream fileStream = new FileStream( @ C:\ _vignesh \serialization \SerializationWithFileWatcher\Output\XmlSerialize.xml,FileMode.Create)) // File.AppendAllText(@D:\ Exeda Work \Serialization Project \ Outputut \XmlSerialize.xml,serializeList)
{
xs.Serialize(fileStream,serializeList); // seri
fileStream.Close();
}
Console.WriteLine( 成功序列化为XML);
}
其他
{
// < span class =code-comment> string path = @C:\ vignesh \serialization \SerializationWithFileWatcher\Output\XmlSerialize.xml;
DeSerialization();
XmlSerializer xs = new XmlSerializer( typeof (List< serializeclass>));
FileStream fs = new FileStream( @ C:\vignesh \serialization \SerializationWithFileWatcher\Output\XmlSerialize.xml,FileMode.Append,FileAccess.Write); // File.AppendAllText(@D:\ Exeda Work \Serialization Project \ Outputut \XmlSerialize.xml,serializeList)
使用(XmlWriter xwr = XmlWriter.Create(fs)) // TextWriter xwr = new StreamWriter
{
xs.Serialize(xwr,serializeList); // seri
// fs.Close();
}
Console.WriteLine( 成功序列化为XML);
}
return serializeList;
字符串 resultPath = @ C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml跨度>;
if (!File.Exists(resultPath))
{
XmlSerializer xs = 新 XmlSerializer( typeof (List< serializeclass>));
使用(FileStream fileStream = new FileStream( @ C:\ _vignesh \serialization \SerializationWithFileWatcher\Output\XmlSerialize.xml,FileMode.Create)) // File.AppendAllText(@D:\ Exeda Work \Serialization Project \ Outputut \XmlSerialize.xml,serializeList)
{
xs.Serialize(fileStream,serializeList); // seri
fileStream.Close();
}
Console.WriteLine( 成功序列化为XML);
}
其他
{
// < span class =code-comment> string path = @C:\ vignesh \serialization \SerializationWithFileWatcher\Output\XmlSerialize.xml;
DeSerialization();
XmlSerializer xs = new XmlSerializer( typeof (List< serializeclass>));
FileStream fs = new FileStream( @ C:\vignesh \serialization \SerializationWithFileWatcher\Output\XmlSerialize.xml,FileMode.Append,FileAccess.Write); // File.AppendAllText(@D:\ Exeda Work \Serialization Project \ Outputut \XmlSerialize.xml,serializeList)
使用(XmlWriter xwr = XmlWriter.Create(fs)) // TextWriter xwr = new StreamWriter
{
xs.Serialize(xwr,serializeList); // seri
// fs.Close();
}
Console.WriteLine( 成功序列化为XML);
}
return serializeList;
< ; arrayofserializeclass xmlns:xsd = http://www.w3.org/2001/XMLSchema xmlns:xsi = http://www.w3.org/2001/XMLSchema-instance >
< serializeclass >
< 创建时间 > 2013-11-25T09:53:25.3325289+ 05:30 < / creationtime >
< fileaction > 重命名< / fileaction >
< properties >
< fileattributes filename = 验证json.txt >
< filesize > 307 < / filesize >
< 扩展名 > .txt < / extension >
< lastaccesstime > 2013-11-25T09:53:25.3325289 + 05:30 < / lastaccesstime > < fullpath > C:\ _vignesh \serialization \SerializationWithFileWatcher \SerializationWithFileWatcherProj \ validate json.txt < / fullpath >
< / fileattributes >
< / properties >
< / serializeclass >
< / arrayofserializeclass < span class =code-keyword>>
解决方案
我建议不要弄乱XmlSerializer的
。基于 Data Contract ,存在更好的序列化器: http://msdn.microsoft .com / zh-CN / library / ms733127.aspx [ ^ ]。
请参阅我过去的答案以获取更多详细信息:
如何在表单应用程序中使用XML文件编写器和阅读器? [ ^ ],
创建属性文件...... [ ^ ]。
-SA
I have a problem when I deserialize the xml into List of Objects. I searched it on the net this morning, but my problem isn't resolved.
Deserialization method
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:\vignesh\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);
}
}
Calling Method
String resultPath = @"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml";
if (!File.Exists(resultPath))
{
XmlSerializer xs = new XmlSerializer(typeof(List<serializeclass>));
using (FileStream fileStream = new FileStream(@"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml", FileMode.Create))//File.AppendAllText(@"D:\Exeda Work\Serialization Project\Output\XmlSerialize.xml",serializeList)
{
xs.Serialize(fileStream, serializeList);//seri
fileStream.Close();
}
Console.WriteLine("Succesfully serialized to XML");
}
else
{
//string path= @"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml";
DeSerialization();
XmlSerializer xs = new XmlSerializer(typeof(List<serializeclass>));
FileStream fs = new FileStream(@"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml", FileMode.Append, FileAccess.Write);//File.AppendAllText(@"D:\Exeda Work\Serialization Project\Output\XmlSerialize.xml",serializeList)
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:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml";
if (!File.Exists(resultPath))
{
XmlSerializer xs = new XmlSerializer(typeof(List<serializeclass>));
using (FileStream fileStream = new FileStream(@"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml", FileMode.Create))//File.AppendAllText(@"D:\Exeda Work\Serialization Project\Output\XmlSerialize.xml",serializeList)
{
xs.Serialize(fileStream, serializeList);//seri
fileStream.Close();
}
Console.WriteLine("Succesfully serialized to XML");
}
else
{
//string path= @"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml";
DeSerialization();
XmlSerializer xs = new XmlSerializer(typeof(List<serializeclass>));
FileStream fs = new FileStream(@"C:\vignesh\serialization\SerializationWithFileWatcher\Output\XmlSerialize.xml", FileMode.Append, FileAccess.Write);//File.AppendAllText(@"D:\Exeda Work\Serialization Project\Output\XmlSerialize.xml",serializeList)
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;
<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:\vignesh\serialization\SerializationWithFileWatcher\SerializationWithFileWatcherProj\validate json.txt</fullpath>
</fileattributes>
</properties>
</serializeclass>
</arrayofserializeclass>
解决方案
I would advise not to mess withXmlSerializer
. Much better serializer exists, based on Data Contract: http://msdn.microsoft.com/en-us/library/ms733127.aspx[^].
Please see my past answers for further detail:
How can I utilize XML File streamwriter and reader in my form application?[^],
Creating property files...[^].
—SA
这篇关于c#反序列化Xml文档错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文