无法从 derrived class 反序列化

Can't deserialize from derrived class

我有以下 class:

public class Label
{
    public string Name { get; set; }

    public List<Field> Fields { get; set; }

    public Label(){}
}

List<Field> 可以包含从 Field 派生的 class,例如:

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);
}

然后我反序列化它,Label 中的 Field 属性 只有 Field,没有 Image。如何获取要添加到字段列表中的派生 class 图像?现在我只能添加 Field classes 并且图像被忽略了。感谢您的帮助!

编辑

如果我将代码更改为以下内容:

[XmlInclude(typeof(Image))]
public abstract class Field
{
    int Xpos { get; set; }
    int Ypos { get; set; }
    int Zindex { get; set; }
    Style Style { get; set; }
}

没有任何反应! :(

使Field抽象,在Image上实现它并使用XmlIncludeAttribute

[XmlInclude(typeof(Image))]
public abstract class Field
{
    int Xpos; 
    int Ypos; 
}

这应该可以解决问题

    [XmlArrayItem(ElementName = "Field", Type = typeof(Field))]
    [XmlArrayItem(ElementName = "Image", Type = typeof(Image))]
    public List<Field> Fields { get; set; }