Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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数据(2,2)_C#_Asp.net_Xml_Visual Studio_Rest - Fatal编程技术网

C# 解析XML数据(2,2)

C# 解析XML数据(2,2),c#,asp.net,xml,visual-studio,rest,C#,Asp.net,Xml,Visual Studio,Rest,我在尝试反序列化XML时遇到了一个独特的问题 方法如下: XmlSerializer serialize = new XmlSerializer(typeof(APIFile)); using(FileStream stream = new FileStream(file, FileMode.Open)) using(XmlReader reader= XmlReader.Create(stream)) { APIFile model = serializ

我在尝试反序列化XML时遇到了一个独特的问题

方法如下:

XmlSerializer serialize = new XmlSerializer(typeof(APIFile));
using(FileStream stream = new FileStream(file, FileMode.Open))
     using(XmlReader reader= XmlReader.Create(stream))
     {
          APIFile model = serialize.Deserialize(reader) as APIFile;
          Console.WriteLine(model.lSubmission.Select(m => m.Id));
     }
因此,当代码到达模型时,我收到一个错误,说明:

xmlns=>不是预期的。 XML文档2,2中存在错误。 构建的模型是通过VisualStudio编辑过去的特殊XML类填充的

我篡改了以下行:

[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
我修改了行:

名称空间 xmlns 拆下线路。 已从根属性更改 但错误依然存在,我不完全确定原因


这是XML的第一部分,之后是一些更次要的内容/部分,将进一步构建。我的文档在文件中的任何地方都没有xmlns,读者或XmlSerializer是否可能正在添加它?

我发现处理xml的最简单方法是使用XDocuments/XElements

using(var reader = StreamReader(new FileStream(file, FileMode.Open)))
{
   var data = reader.ReadToEnd();
   var xml = new XElement(data);
   //TODO: query xml with linq or whatever
}

处理整个文档和片段

我设法将问题隔离为几个项目:

数据模型没有处理插入的所有内容。 第三方API正在传递XML,这也导致了一个错误。 我编写了一个简单的验证方法,通过该文件验证XML并修复任何格式错误的标记或符号

最终反序列化值的代码是:

    public static void ParseToModel(string file)
    {
        if (string.IsNullOrEmpty(file))
            throw new ArgumentNullException();

        XmlSerializer serialize = new XmlSerializer(typeof(CanvasResult));
        using(FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
            using(XmlReader reader= XmlReader.Create(stream))
            {
                CanvasResult model = serialize.Deserialize(reader) as CanvasResult;
                ParseToDatabase(model);
            }
    }

调用该方法,该方法将获取文件参数,然后将内容与数据模型关联。最后,它调用一个名为ParseToDatabase的单独方法,该方法将内容分解并放入数据库中的适当列中。

您需要显示可能根本不是XML的XML。@AlexeiLevenkov生成的模型来自第三方XML Rest API;如果我添加该文件的内容,它将相当大。需要吗?虽然我不能代表其他人说话,但我主要对文件的前几行感兴趣。代码似乎在XML文档的开头出错,因此我倾向于认为问题就在那里。错误中的文本xmlns=>是否出现在文档中的任何地方?@Greg感谢添加XML。。。但它看起来不同于您在第二行中遇到的错误,因为没有xmlns…我们试图自动生成一个模型,以使其更干净,但如果我不能,我可能不得不这样做。您是说这个dom代表一个类型的数据?所以您需要反序列化到某个对象中?1-序列化的用途是什么2-您使用的stmt不应以结束;3-没有将流作为参数的XElement构造函数。这也可以是一个评论,就像另一个答案一样。
    public static void ParseToModel(string file)
    {
        if (string.IsNullOrEmpty(file))
            throw new ArgumentNullException();

        XmlSerializer serialize = new XmlSerializer(typeof(CanvasResult));
        using(FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
            using(XmlReader reader= XmlReader.Create(stream))
            {
                CanvasResult model = serialize.Deserialize(reader) as CanvasResult;
                ParseToDatabase(model);
            }
    }