У меня есть следующий класс:Не может десериализации из derrived класса
public class Label
{
public string Name { get; set; }
public List<Field> Fields { get; set; }
public Label(){}
}
List<Field>
может содержать derrived классов от Field
, например:
public class Image : Field
{
public string Path { get; set; }
public int MyProperty { get; set; }
}
public class Field
{
int Xpos { get; set; }
int Ypos { get; set; }
}
Однако, когда я использую следующий XML :
<?xml version="1.0" encoding="utf-8"?>
<Label>
<Name>test</Name>
<Fields>
<Image></Image>
</Fields>
</Label>
Мой десериализации код:
string xmlString = File.ReadAllText(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "Label_1.xml");
var serializer = new XmlSerializer(typeof(Label), new XmlRootAttribute("Label"));
Label result;
using (TextReader reader = new StringReader(xmlString))
{
result = (Label)serializer.Deserialize(reader);
}
И я десериализация его, Field
свойства из Label
имеет только Field
в нем, а не Image
. Как я могу получить классный образ Derrive, который будет добавлен в список полей? Теперь я могу добавлять классы Field, и изображения игнорируются. Спасибо за помощь!
EDIT
Если я изменить свой код на следующее:
[XmlInclude(typeof(Image))]
public abstract class Field
{
int Xpos { get; set; }
int Ypos { get; set; }
int Zindex { get; set; }
Style Style { get; set; }
}
Ничего не происходит! :(
Возможный дубликат [C# XML сериализации производных классов] (http://stackoverflow.com/questions/3326481/c-sharp-xml-serialization-of-derived-classes) –