質問

次のコードがあります:

public class DeserializeAndCompare
{
    public static List<string> IntoXML()
    {
        List<string> PopList = new List<string>();

        XmlSerializer serializer = new XmlSerializer(PopList.GetType());
        string k = FileToolBox.position0;
        FileStream filestreamer = new FileStream(k.ToString(), FileMode.Open);
        PopList = (List<string>)serializer.Deserialize(filestreamer);
        filestreamer.Close();
        return PopList;

    }
}

次の行でエラーが発生し続けます:     PopList =(リスト)serializer.Deserialize(filestreamer);

エラー:InvalidOperationExceptionが処理されませんでした、XMLドキュメント(1,1)にエラーがあります。

この行では:     FileStream filestreamer = new FileStream(k、FileMode.open);

文字列を保持する配列の0番目の位置を参照しようとしています。基本的にはディレクトリを検索して、拡張子が.xmlのファイルを見つけ、ファイル名のパスを配列に保持します。
配列のコードは次のとおりです。

public static class FileToolBox
{

    public static string position0;
    public static void FileSearch()
    {



        //string position0;

        //array holding XML file names
        string[] array1 = Directory.GetFiles(@"s:\project", "*.xml");

        Array.Sort(array1);
        Array.Reverse(array1);
        Console.WriteLine("Files:");
        foreach (string fileName in array1)
        {

            Console.WriteLine(fileName);

        }

        position0 = array1[0];

    }

    public static string Position0
    {
     get
        {
            return position0;
        }
        set
        {
            position0 = value;
        }

    }
    }

ここに何かがありませんか?このエラーを取り除くにはどうすればよいですか?

助けてくれてありがとう。

役に立ちましたか?

解決

XMLファイルの形式が正しくありません。XMLSpy、XMLメモ帳などのツールを使用するか、IEで開いてください。エラーとその行が表示されます。おそらく&amp;のような無効な文字があります。ファイルのどこか

他のヒント

このエラーは、読み取られているXMLファイルの形式が正しくないことを具体的に示しています。 XMLを投稿することから始めてください。また、FirefoxでXMLを開いてみてください。XMLの問題も指摘されている可能性があります。

XMLドキュメントの形式が正しくありません。xmlファイルを開いて分析する必要があります。

Webには複数のxmlバリデーターがありますが、これは w3schools のものです。

これを試してみましょう:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace Util
{
    /// <summary>
    /// Not to be confused with System.Xml.Serialization.XmlSerializer, which this uses internally.
    /// 
    /// This will convert the public fields and properties of any object to and from an XML string, 
    /// unless they are marked with NonSerialized() and XmlIgnore() attributes.
    /// </summary>
    public class XMLSerializer
    {
        public static Byte[] GetByteArrayFromEncoding(Encoding encoding, string xmlString)
        {
            return encoding.GetBytes(xmlString);
        }

        public static String SerializeToXML<T>(T objectToSerialize)
        {
            return SerializeToXML(objectToSerialize, Encoding.UTF8);
        }

        public static String SerializeToXML<T>(T objectToSerialize, Encoding encoding)
        {
            StringBuilder sb = new StringBuilder();

            XmlWriterSettings settings =
                new XmlWriterSettings { Encoding = encoding, Indent = true };

            using (XmlWriter xmlWriter = XmlWriter.Create(sb, settings))
            {
                if (xmlWriter != null)
                {
                    new XmlSerializer(typeof (T)).Serialize(xmlWriter, objectToSerialize);
                }
            }

            return sb.ToString();
        }

        public static void DeserializeFromXML<T>(string xmlString, out T deserializedObject) where T : class
        {
            DeserializeFromXML(xmlString, new UTF8Encoding(), out deserializedObject);
        }

        public static void DeserializeFromXML<T>(string xmlString, Encoding encoding, out T deserializedObject) where T : class
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));

            using (MemoryStream memoryStream = new MemoryStream(GetByteArrayFromEncoding(encoding, xmlString)))
            {
                deserializedObject = xs.Deserialize(memoryStream) as T;
            }
        }
    }
}


public static void Main()
{
    List<string> PopList = new List<string>{"asdfasdfasdflj", "asdflkjasdflkjasdf", "bljkzxcoiuv", "qweoiuslfj"};

    string xmlString = Util.XMLSerializer.SerializeToXML(PopList);

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(xmlString);

    string fileName = @"C:\temp\test.xml";
    xmlDoc.Save(fileName);

    string xmlTextFromFile = File.ReadAllText(fileName);

    List<string> ListFromFile;

    Util.XMLSerializer.DeserializeFromXML(xmlTextFromFile, Encoding.Unicode, out ListFromFile);

    foreach(string s in ListFromFile)
    {
        Console.WriteLine(s);
    }
}

出力XMLファイルを確認し、エンコーディングが何であるかを確認し、それを読み取りしようとしているエンコーディングと比較します。 UTF-16ですが、UTF-8として読み込もうとしていました。 Encoding.Unicodeを使用してみて、それが機能するかどうかを確認してください。

コードは、次の構造を持つXMLファイルでのみ機能します...

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>Hello</string>
  <string>World</string>
</ArrayOfString>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top