سؤال

ولدي البرمجية التالية:

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 = يقوم FileStream جديدة (ك، FileMode.open)؛

وأنا أحاول أن الرجوع إلى موقف 0TH من صفيف يحمل السلاسل. انا ذاهب أساسا من خلال الدليل الخاص بي، وإيجاد أي ملفات بامتداد .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 الخاصة بك بشكل جيد، واستخدام أداة مثل XML جاسوس، XML المفكرة أو فتحه في IE وسوف تعطيك خطأ والخط هو جرا. هل من المرجح أن تحتوي على أحرف غير صالحة مثل وفي مكان ما في ملف

نصائح أخرى

وهذا الخطأ هو يشير على وجه التحديد أن ملف XML قراءتها تالف. يجب أن تبدأ من خلال نشر XML الخاصة بك. أيضا، حاول فتح XML في فايرفوكس، لأنه قد يشير إلى مشكلة مع XML أيضا.

لا تشكل وثيقة XML الخاصة بك بشكل جيد، وتحتاج إلى فتح ملف 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 ونرى ما هو الترميز، وقارن ذلك بما ترميز كنت تحاول قراءة في. حصلت على واقعة مع هذه المشكلة من قبل لأنني استخدام ب StringBuilder لإخراج سلسلة 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