0

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

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% 生成的代码,所以我可以忽略实现细节,但这有点困扰我(另外,我的类图中出现了那些“嵌套类型”)。

好的,所以这让我很困扰,因为无法将属性应用于属性来告诉它如何序列化。

4

1 回答 1

0

所以据我所知,这个问题是 svcutil 的产物。如果我愿意手动编写序列化代码,从http://msdn.microsoft.com/en-us/library/aa347850.aspx看来,我确实可以使用样式 1 并避免不必要的内部类型。

由于消费者的界面是相同的,因此我将轻松更新,而不是拥有一个干净的对象模型。

于 2012-06-08T15:37:47.870 回答