Вопрос:
Я пытаюсь прочитать XML-документ. Мой XML:
<?xml version=»1.0″ encoding=»utf-8″?> <SplashScreen xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns:xsd=»http://www.w3.org/2001/XMLSchema»> <Path>SplashScreen/Image-King</Path> </SplashScreen>
Мой код, который читает XML:
XmlGameScreen = new XmlManager<GameScreen>(); XmlGameScreen.Type = currentscreen.Type; currentscreen = XmlGameScreen.Load(«LoadXML/SplashScreen.xml»);
А также
public Type Type; public T Load(string path) { T instance; using (TextReader textreader = new StreamReader(path)) { XmlSerializer xml = new XmlSerializer(Type); instance = (T)xml.Deserialize(textreader); } return instance; }
Я получаю ошибку на instance = (T)xml.Deserialize(textreader); Является ли мой XML-документ неправильным? Я пытаюсь прочитать <Path>. Обновление: мое внутреннее исключение: не может сериализовать элемент ‘MyRPGgame.SplashScreen._image’ типа ‘Microsoft.Xna.Framework.Graphics.Texture2D’
Лучший ответ:
Мой опыт в этом заключается в том, что во 2-й строке во втором символе есть ошибка. посмотрите, отличаются ли ваши имена классов от тегов XML. вы, возможно, меняете “Имя корня XML” на другое.
Посмотрите на структуру XML и какой класс вы сериализуете на какой узел.
Кроме того, прочитайте документацию MSDN о классе XmlRootAttribute.
Ответ №1
В моем случае, похоже, один из обновлений Visual Studio 2017 версии 15.5 вызвал эту ошибку при попытке открыть проекты SSRS. Решение заключается в удалении файла *.rptproj.rsuser из папки проекта и повторите попытку.
Ответ №2
Обычно это означает, что у вас есть пробел в начале файла; проверьте разрыв строки перед <?xml… Еще лучше: пожалуйста, покажите первые несколько байтов (желательно до <SplashScreen) файла, если смотреть в двоичном редакторе.
Это также может означать, что у вас есть невидимый юникод или контрольный символ где-то перед <SplashScreen