无法从 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; }
我有以下 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; }