Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化Xml文档错误_C#_Xml_Xml Deserialization - Fatal编程技术网

C# 反序列化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

当我将xml反序列化到对象列表中时,我遇到了一个问题。今天早上我在网上搜索了一下,但是我的问题没有解决

反序列化方法

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检查上面“更新”中的链接。