Задать вопрос
@etherreals

Как настроить XML сериализацию?

Помогите настроить XML сериализацию. Выдает такое exception:
Необработанное исключение типа "System.InvalidOperationException" в System.Xml.dll
Дополнительные сведения: В документе XML (2, 2) присутствует ошибка.


За любые замечания по коду так же буду благодарен.

<?xml version="1.0"?>

<ArrayOfMovie xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<Movie>

    <Title>Alien</Title>

    <Year>1979</Year>

    <Rating>8.8</Rating>

    <Director>Ridley Scott</Director>

</Movie>


<Movie>

    <Title>The Matrix</Title>

    <Year>1999</Year>

    <Rating>8.7</Rating>

    <Director>Wachowski Brothers</Director>

</Movie>


<Movie>

    <Title>Inception</Title>

    <Year>2010</Year>

    <Rating>8.8</Rating>

    <Director>Christopher Nolan</Director>

</Movie>


<Movie>

    <Title>Interstellar</Title>

    <Year>2014</Year>

    <Rating>8.7</Rating>

    <Director>Christopher Nolan</Director>

</Movie>

</ArrayOfMovie>

public class XMLSerialization<T> : IXMLSerialization<T>
    {

        public XMLSerialization() { }

        public void ToXml(string filename, T data)
        {
            if (File.Exists(filename)) File.Delete(filename);
            using (var fileIn = new FileStream(filename, FileMode.Create))
            {
                var ser = new XmlSerializer(typeof(T));
                ser.Serialize(fileIn, data);
            }
        }

        public T FromXml(string filename)
        {
            using (var fs = new FileStream(filename, FileMode.Open))
            {
                var ser = new XmlSerializer(typeof(T));
                return (T)ser.Deserialize(fs);
            }
        } 
    }


[Serializable]
    public class Movie : BaseEntity
    {

        public string Title { get; set; }
        public ushort Year { get; set; }
        public double Rating { get; set; }
        public string Director { get; set; }

        public Movie() { }

        public Movie(string title, ushort year, double rating, string director)
        {
            Title = title;
            Year = year;
            Rating = rating;
            Director = director;
        }

        public override string ToString()
        {
            return string.Format("Title: {0}, year: {1}, rating: {2}, director: {3}", Title, Year, Rating, Director);
        }
  • Вопрос задан
  • 2052 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Melz
1. XML (2, 2) это почти 80% неправильное конвертирование типов. То есть вы пытаетесь десиарилизовать объект в неправильный тип. Или тип в список

2. Отсутствие root-элемента.

Попробуйте сериализовать/десериализовать обычным.
XmlSerializer deserializer = new XmlSerializer(typeof(MyTypr));


Пропишите кодировку в XML, encoding="utf-8".

Пропишите аттрибуты (зависит от версии) в классе
[XmlElement]
[XmlRoot("...")]
там еще что-то с array есть.


Поймаете эксепшн в catch и посмотрите что там написано. Там больше деталей иногда
Ответ написан
Комментировать
@throughtheether
human after all
Дополнительные сведения: В документе XML (2, 2) присутствует ошибка.

Вероятно, подразумеваются символы "-" перед нодами верхнего уровня. Если нет твердого обоснования их присутствия, удалите их.
Ответ написан
Комментировать
@etherreals Автор вопроса
На самом деле их в коде нет, то просто так случайно перенеслось на toster
Ответ написан
Комментировать
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
А если сделать специальную вставку XML как код на C# ? Сериализация будет работать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы