0
인터페이스를 사용하여 serialize/deserialize 할 수 없다는 것을 알고 있지만 동작이 혼란 스럽습니다.XmlSerialization 및 interfaces
역 직렬화하여 인터페이스로 다시 캐스트 할 때 일부 속성은 null입니다. 그러나 구체적인 유형으로 다시 캐스트하면 동일한 속성에 가치가 있습니까? (간결 단축)이 XML 주어진 그래서
:
<Page>
<ComponentPresentations>
<ComponentPresentation>
<Component>
<Categories>
<Category>
<Id>tcm:35-540-512</Id>
이
var serializer = new XmlSerializer(typeof(Page));
page = (IPage)serializer.Deserialize(reader);
page.ComponentPresentations[0].Component.Categories <-- is null
로 직렬화 복원하지만 형식으로 다시 캐스팅 경우,
var serializer = new XmlSerializer(typeof(Page));
page = (Page)serializer.Deserialize(reader);
page.ComponentPresentations[0].Component.Categories <-- is not null!
페이지 유형 인터페이스 Categories 속성과 비 인터페이스 속성을 노출합니다. - serialize interf 에이스 문제.
public List<Category> Categories { get; set; }
[XmlIgnore]
IList<ICategory> IComponent.Categories
{
get { return Categories as IList<ICategory>; }
}
인터페이스 속성이 설정자를 노출하지 않으므로이 방법이 사용됩니까?
위대한 답변! 지금 contravariance에 대해 읽으 려구요! – Neil
@Neil은'IEnumerable'을 사용하여 필요한 기능을 제공합니다. –
Aliostad