сериализовать объекты родительского класса и производных от нееПочему объект, правильно построенный с помощью метода десериализации, имеет тест отказов Myclass? или как MyClass?
namespace CyXml
{
[Serializable]
public class XmlInfo : IFormattable, ISerializable
{
public string Mnemonique { get; set; }
....
}
[Serializable]
public class XmlLabel: XmlInfo
{
public XmlLabel()
: base()
{
}
....
}
[Serializable]
public class XmlVoyant : XmlInfo
{
public XmlVoyant()
: base()
{
}
....
}
[Serializable]
public class XmlButton: XmlInfo
{
public XmlButton()
: base()
{
}
....
}
}
, когда déssérialisation из ArrayList как тип объекта является правильным, тест не работает.
ArrayList XmlInfos = new ArrayList();
public void ReadXmllInfo(int vue)
{
System.Xml.Serialization.XmlSerializer reader =
new System.Xml.Serialization.XmlSerializer(typeof(ArrayList),
new Type[]{
typeof(CyXml.XmlInfo),
typeof(CyXml.XmlLabel),
typeof(CyXml.XmlVoyant),
typeof(CyXml.XmlButton)});
string xml = String.Format(@"C:\XML\Outil{0}.xml", vue);
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader(xml);
XmlInfos = (ArrayList)reader.Deserialize(file);
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
finally
{
if (file != null)
file.Close();
}
int TabIndex=this.Controls.Count;
foreach(var elmt in XmlInfos)
{
//MessageBox.Show(elmt.GetType().ToString());
Type serie=elmt.GetType();
XmlInfo elmt1 = new XmlInfo();
Type serie1 = elmt1.GetType();
elmt1 = (XmlInfo)elmt;
if (elmt is XmlInfo)
{
....
}
else if (elmt is XmlLabel)
{
....
}
else if (elmt is XmlVoyant)
{
....
}
else if (elmt is XmlButton)
{
....
}
}
}
Невозможно для меня назначить объекты из объекта на объект родительского класса.
elmt1 = (XmlInfo)elmt;
System.InvalidCastException исключение было необработанным с помощью кода пользователя Message = [A] CyXml.XmlInfo не может быть преобразован в [B] CyXml.XmlInfo. Тип A поступает из «IHMTest, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null» в контексте «По умолчанию» в месте «C: \ TwinCAT \ TcApplication \ Plugins \ IHMTest.dll». Тип B относится к «IHMTest, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null» в контексте «LoadFrom» в месте «C: \ TwinCAT \ Plugins \ IHMTest.dll». Источник = IHMTest
этот код корректно работает в программе, но не работает в библиотеке DLL
кого-то есть идеи?
сердечного привет
'n'a pas été gérée par le code utilisateur' bla bla bla. Вы можете, по крайней мере, использовать перевод Google для публикации сообщения об ошибке на английском языке. – EZI
Я редактировал ваше исключение на английском языке, чтобы оно было читаемым. Ваш заголовок также может быть лучше написан, например: «Объект XmlSerializer.Serialize не будет десериализоваться обратно к исходному типу объекта» –