c#反序列化Xml文档错误 [英] c# Deserialization Xml Document Error

查看:61
本文介绍了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 with XmlSerializer. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆