Generics 在svcutil生成的代码中嵌套泛型集合类是否有原因?

Generics 在svcutil生成的代码中嵌套泛型集合类是否有原因?,generics,datacontractserializer,svcutil.exe,Generics,Datacontractserializer,Svcutil.exe,我正在使用如下命令行生成数据合同: svcutil /ct:System.Collections.Generic.List`1 MySchema.xsd 在我生成的代码中,我最终得到了这样的结果(我们称之为“样式1”): 部分类A:对象,System.Runtime.Serialization.IEExtensibleDataObject { 私人B型收藏B; 公共B类型集合FB { 获取{return collectionB;} 集合{collectionB=value} } [System

我正在使用如下命令行生成数据合同:

svcutil /ct:System.Collections.Generic.List`1 MySchema.xsd
在我生成的代码中,我最终得到了这样的结果(我们称之为“样式1”):

部分类A:对象,System.Runtime.Serialization.IEExtensibleDataObject
{
私人B型收藏B;
公共B类型集合FB
{
获取{return collectionB;}
集合{collectionB=value}
}
[System.Runtime.Serialization.CollectionDataContractAttribute(…)]
公共类B类型:System.Collections.Generic.List
{
}
}
为什么不生成这样的样式(样式2)?:

部分类A:对象,System.Runtime.Serialization.IEExtensibleDataObject
{
private System.Collections.Generic.List collectionB;
public System.Collections.Generic.List collectionfb
{
获取{return collectionB;}
集合{collectionB=value}
}
}
从使用代码的角度来看,两者的最终结果似乎是相同的。样式1启用序列化的唯一原因是什么(CollectionDataContractAttribute的文档表明它适用于类或结构)?它们是内部类,这是100%生成的代码,所以我可以忽略实现细节,但这让我有点困扰(另外,我的类图中显示了那些“嵌套类型”)


好吧,我很困扰,无法将属性应用于属性来告诉它如何序列化。

因此,我可以说,这个问题是svcutil的产物。如果我愿意手工编写序列化代码,那么从外观上看,我确实可以使用样式1并避免不必要的内部类型

由于消费者的界面是相同的,因此我将在拥有干净的对象模型的基础上更轻松地进行更新