Ich weiß, dass Sie nicht mit einer Schnittstelle serialisieren/deserialize, aber ich bin verwirrt durch Verhalten, das ich sehe.XmlSerialization und Schnittstellen
Wenn ich deserialize und an die Schnittstelle zurückgeworfen habe, sind einige Eigenschaften null. Aber wenn ich auf den konkreten Typ zurückgeworfen habe, hat die gleiche Eigenschaft einen Wert?
So gegeben, diese XML (der Kürze halber verkürzt):
<Page>
<ComponentPresentations>
<ComponentPresentation>
<Component>
<Categories>
<Category>
<Id>tcm:35-540-512</Id>
Deserialisieren mit
var serializer = new XmlSerializer(typeof(Page));
page = (IPage)serializer.Deserialize(reader);
page.ComponentPresentations[0].Component.Categories <-- is null
Aber wenn ich zurückgeworfen auf die Art,
var serializer = new XmlSerializer(typeof(Page));
page = (Page)serializer.Deserialize(reader);
page.ComponentPresentations[0].Component.Categories <-- is not null!
Der Seitentyp macht die Schnittstelle Kategorien Eigenschaft und eine Nicht-Schnittstelle Eigenschaft - ich nehme an, um die Serialisierung interf zu umgehen ein Problem.
public List<Category> Categories { get; set; }
[XmlIgnore]
IList<ICategory> IComponent.Categories
{
get { return Categories as IList<ICategory>; }
}
Liegt das daran, dass die Interface-Eigenschaft keinen Setter aussetzt?
Große Antwort! Ab jetzt über Kontravarianz zu lesen! – Neil
@Neil mit 'IEnumerable' gibt Ihnen die Funktion, die Sie benötigen. –
Aliostad