공용 인터페이스를 구현하는 개체 목록이 있습니다.
"는 인터페이스이기 때문에 ... 형 ... 직렬화 할 수 없습니다 멤버"XmlSerializer 오류 직렬화 인터페이스 개체
private readonly ObservableCollection<ICanHasInterface> children = new ObservableCollection<ICanHasInterface>();
public ObservableCollection<ICanHasInterface> Children
{
get { return children; }
}
=> : 나는 단순히 직렬화하려고하면 나는 시리얼이 인터페이스를 직렬화 할 수없는 나에게 알려주는 좋은 예외가
분명히 개체의 형식을 가져오고 xsi:type
(개체가 다른 클래스에서 상속 된 경우 수행됨) 특성을 가진 XmlElement를 표시하도록 serializer에 요청하는 것은 너무 많습니다. 이와
private readonly ObservableCollection<ICanHasInterface> children = new ObservableCollection<ICanHasInterface>();
[XmlIgnore()]
public ObservableCollection<ICanHasInterface> Children
{
get { return children; }
}
[XmlElement("Child")]
public List<object> ChildrenSerialized
{
get
{
return new List<object>(Children);
}
set
{
Children.Clear();
foreach (var child in value)
{
if (child is ICanHasInterface) AddChild(child as ICanHasInterface);
}
}
}
직렬화 단지 (미세 참고 작동 적어도 : 나는 IXmlSerializable
를 구현하고 싶지 않기 때문에
그래서, 나는 유망 처음 보았다 해결 방법까지 생각 어느 유형에 대한 XmlInclude
속성을 지정을 그 수 원래 목록에 있거나 serializer의 생성자에 배열 형식을 넘겨 줘야합니다.) 그러나 개체가 deserialize하는 동안 set
블록에 도달하지 않았기 때문에 Children
컬렉션이 비어있게됩니다. 이유는 무엇입니까? 이다; 어떤 아이디어?
고마워, 배열과 완벽하게 작동합니다! –