インターフェイスを使用してシリアライズ/デシリアライズできないことがわかりますが、私が見ている動作によって混乱します。Xmlシリアル化とインターフェイス
デシリアライズしてインターフェイスにキャストバックすると、いくつかのプロパティは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プロパティと非インターフェイスのプロパティを公開します。エース問題。
public List<Category> Categories { get; set; }
[XmlIgnore]
IList<ICategory> IComponent.Categories
{
get { return Categories as IList<ICategory>; }
}
これはインターフェイスのプロパティがセッターを公開しないためですか?
偉大な答え!今contravarianceについて読むことをオフに! – Neil
@Neilで 'IEnumerable'を使うと、必要な機能が得られます。 –
Aliostad