使用WCF时,为什么有关基类的DataMember属性的额外模式信息?

时间:2013-10-02 08:57:05

标签: wcf datacontract

我定义了一些DataContracts,一个继承自另一个。这些不是确切的类,但有类似的东西:

[DataContract]
public class BaseModel 
{
    [DataMember]
    public String Id {get;set;}
}

[DataContract]
public class MyModel : BaseModel 
{
    [DataMember]
    public String Name {get;set;}
}

我正在使用带有basicHTTPbinding的WCF将数据从服务器移动到客户端。当我使用fiddler来查看正在发送的数据时,它正在做一些有点奇怪的事情。

在返回的原始数据中,当我检查Name属性时,我可以看到'Name'后跟数据。对于Id属性,我看到“Id http://schema.datacontract.org/2004/07/MyService”后跟数据。我只看到schema.datacontract.org部分来自基类的字段。为什么只有继承的字段才能获得该模式部分?两个类都在同一名称空间中。我不希望它在任何属性上,因为它为我的响应增加了很大的大小。无论如何我可以把它关掉吗?

1 个答案:

答案 0 :(得分:1)

我更改了每个[DataContract]以包含具有相同值的Namespace,例如

[DataContract(Namespace = "http://schemas.datacontract.org/2004/07/MyCode.Service")]

这解决了我的问题。不知道为什么需要指定它,因为它们已经在相同的命名空间中,但确实有效。