다음과 같은 수업이 있습니다.
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
A로부터 재산 Label
만이 가지고 Field
는 거기에하지 Image
. 파생 된 클래스 이미지를 필드 목록에 추가하려면 어떻게해야합니까? 이제 필드 클래스 만 추가 할 수 있으며 이미지는 무시됩니다. 도와 주셔서 감사합니다!
편집하다
내 코드를 다음과 같이 변경하면 :
[XmlInclude(typeof(Image))]
public abstract class Field
{
int Xpos { get; set; }
int Ypos { get; set; }
int Zindex { get; set; }
Style Style { get; set; }
}
아무 반응이 없습니다! :(
이것은 트릭을해야한다
[XmlArrayItem(ElementName = "Field", Type = typeof(Field))]
[XmlArrayItem(ElementName = "Image", Type = typeof(Image))]
public List<Field> Fields { get; set; }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다