我正在使用如下命令行生成我的数据合同:
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% 生成的代码,所以我可以忽略实现细节,但这有点困扰我(另外,我的类图中出现了那些“嵌套类型”)。
好的,所以这让我很困扰,因为无法将属性应用于属性来告诉它如何序列化。