我有以下课程:
public class Label
{
public string Name { get; set; }
public List<Field> Fields { get; set; }
public Label(){}
}
List<Field>
可以包含来自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
的{{1}}属性只包含Label
,而不是Field
。我怎样才能将得到的图像添加到字段列表中?现在我只能添加Field类,并且忽略了Images。谢谢你的帮助!
修改
如果我将代码更改为以下内容:
Image
什么都没发生! :(
答案 0 :(得分:1)
制作Field
抽象,在Image
上实施并使用XmlIncludeAttribute
[XmlInclude(typeof(Image))]
public abstract class Field
{
int Xpos;
int Ypos;
}
答案 1 :(得分:1)
这应该可以解决问题
[XmlArrayItem(ElementName = "Field", Type = typeof(Field))]
[XmlArrayItem(ElementName = "Image", Type = typeof(Image))]
public List<Field> Fields { get; set; }