(C#) Не работает сериализация
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
(C#) Не работает сериализация - 2010-04-04 21:11:29.110000
|
|
|
sbk
Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
|
Пытаюсь сериализовать класс, но во время исполнения вылетает ошибка. Что делать - не знаю, в гугле не нашёл(может плохо искал). В общем подскажите что не так в классе. Вот сам класс:
[Serializable]
[XmlRoot("SnakeSaveInfo")]
public class game_save
{
public SnakeSpeeds SnakeSpeed { get; set; }
public cpoint SnakeHead { get; set; }
public List<cpoint> SnakeBody { get; set; }
public Direction SnakeDirection { get; set; }
public cpoint ApplePosition { get; set; }
public string MapFile { get; set; }
public string PlayerName { get; set; }
public int PlayerScore { get; set; }
public int AppleScore { get; set; }
}
Direction, SnakeSpeeds - перечисления.
|
|
|
RE: (C#) Не работает сериализация - 2010-04-04 22:37:58.880000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
Ну что за народ, ну вылетает ошибка, скажите, какая, а то всё наугад, всё наугад. Насколько я помню, необходимо добавлять специальные аттрибуты (XmlElement, XmlAttribute) перед каждым элементом, который нужно сериализовать, а не только перед именем класса.
|
|
|
RE: (C#) Не работает сериализация - 2010-04-04 22:49:38.700000
|
|
|
sbk
Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
|
Вот текст ошибки: System.InvalidOperationException не обработано
Message="Возникла ошибка при отражении типа \"snake.game_save\"."
Source="System.Xml"
StackTrace:
в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportElement(TypeModel model, XmlRootAttribute root, String defaultNamespace, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type, XmlRootAttribute root, String defaultNamespace)
в System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
в System.Xml.Serialization.XmlSerializer..ctor(Type type)
в snake.Program.SaveGame() в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 324
в snake.Program.PauseGame(Action act) в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 267
в snake.Program.GameTour() в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 250
в snake.Program.Main(String[] args) в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 240
в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException: System.InvalidOperationException
Message="Не удается сериализовать член \"snake.game_save.SnakeHead\" типа \"snake.cpoint\". Дополнительные сведения см. во внутреннем исключении."
Source="System.Xml"
StackTrace:
в System.Xml.Serialization.StructModel.CheckSupportedMember(TypeDesc typeDesc, MemberInfo member, Type type)
в System.Xml.Serialization.StructModel.GetPropertyModel(PropertyInfo propertyInfo)
в System.Xml.Serialization.StructModel.GetFieldModel(MemberInfo memberInfo)
в System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(StructMapping mapping, StructModel model, Boolean openModel, String typeName, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(StructModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter limiter)
в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel model, String ns, ImportContext context, String dataType, XmlAttributes a, Boolean repeats, Boolean openModel, RecursionLimiter limiter)
InnerException: System.InvalidOperationException
Message="Невозможно сериализовать snake.cpoint, т. к. он не имеет беспараметрического конструктора."
InnerException:
Насчет атрибутов. Добавил. Всё равно не работает. Может я неправильные атрибуты расставил. Вот как я это сделал:
[Serializable]
[XmlRoot("SnakeSaveInfo")]
public class game_save
{
[XmlAttribute]
public SnakeSpeeds SnakeSpeed { get; set; }
[XmlAttribute]
public cpoint SnakeHead { get; set; }
[XmlElement]
[XmlArray]
public List<cpoint> SnakeBody { get; set; }
[XmlAttribute]
public Direction SnakeDirection { get; set; }
[XmlAttribute]
public cpoint ApplePosition { get; set; }
[XmlAttribute]
public string MapFile { get; set; }
[XmlAttribute]
public string PlayerName { get; set; }
[XmlAttribute]
public int PlayerScore { get; set; }
[XmlAttribute]
public int AppleScore { get; set; }
}
|
|
|
RE: (C#) Не работает сериализация - 2010-04-04 22:54:40.703333
|
|
|
sbk
Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
|
Спасибо, kreol! Меня уже наставили на верный путь, так что дальше буду сам, свои же, ошибки разгребать.
|
|
|
RE: (C#) Не работает сериализация - 2010-04-08 19:08:05.990000
|
|
|
sbk
Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
|
Что бы не создавать новый топик спрошу здесь. В общем есть у меня XML - файл
<?xml version="1.0"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Имя: {0}</string>
<string>Счёт: {0}</string>
<!-- и т.д. -->
Пытаюсь его десериализировать в класс List<string>. Но при выполнении выдаёт ошибку InvalidOperationException, "В документе XML (3,11) присутствует ошибка." . Насколько я понял это из за кириллицы. Что надо сделать что бы не было ошибки? P.S. Вот полный текст исключения System.InvalidOperationException не обработано
Message="В документе XML (3, 11) присутствует ошибка."
Source="System.Xml"
StackTrace:
в System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
в System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)
в snake.Program.LoadLanguage(String from) в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 273
в snake.Program.LoadLocale(String language) в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 267
в snake.Program.Main(String[] args) в C:\Users\Admin\Documents\Visual Studio 2008\Projects\snake\snake\Program.cs:строка 260
в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Xml.XmlException
Message="Недопустимый знак для указанной кодировки. Строка 3, позиция 11."
Source="System.Xml"
LineNumber=3
LinePosition=11
SourceUri=""
StackTrace:
в System.Xml.XmlTextReaderImpl.Throw(Exception e)
в System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
в System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res)
в System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount)
в System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount)
в System.Xml.XmlTextReaderImpl.ReadData()
в System.Xml.XmlTextReaderImpl.ParseElementContent()
в System.Xml.XmlTextReaderImpl.Read()
в System.Xml.XmlTextReader.Read()
в System.Xml.XmlReader.ReadElementString()
в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderList1.Read1_ArrayOfString()
InnerException:
Если менять кодировку, то на какую(и как)?
|
|
|
RE: (C#) Не работает сериализация - 2010-04-08 19:29:56.296666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
В xml явно указать кодировку? И не забыть сохранить файл именно в этой кодировке (в MSVS это File -> Advanced Save Options…). <?xml version="1.0" encoding="windows-1251"?>
|
|
|
|
|