次のようなコマンド ラインでデータ コントラクトを生成しています。
svcutil /ct:System.Collections.Generic.List`1 MySchema.xsd
生成されたコードでは、次のような結果になります (これを「スタイル 1」と呼びましょう)。
partial class A : object, System.Runtime.Serialization.IExtensibleDataObject
{
private BType collectionB;
public BType CollectionOfB
{
get { return collectionB; }
set { collectionB = value }
}
[System.Runtime.Serialization.CollectionDataContractAttribute(...)]
public class BType : System.Collections.Generic.List<B>
{
}
}
このように生成されないのはなぜですか (スタイル 2)?:
partial class A : object, System.Runtime.Serialization.IExtensibleDataObject
{
private System.Collections.Generic.List<B> collectionB;
public System.Collections.Generic.List<B> CollectionOfB
{
get { return collectionB; }
set { collectionB = value }
}
}
コードを使用するという観点からは、両方の最終結果は同じように見えます。スタイル 1 がシリアル化を有効にする唯一の理由はありますか (CollectionDataContractAttribute のドキュメントは、クラスまたは構造体に適用されることを示しています)? それらは内部クラスであり、これは 100% 生成されたコードであるため、実装の詳細は無視できますが、少し気になります (さらに、クラス図に「ネストされた型」が表示されます)。
さて、プロパティに属性を適用してシリアル化する方法を伝えることができないのは非常に気になります。