Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为具有“属性”的类创建的重复属性;“数据合同”;及;“可序列化”;_.net_Wcf_Wcf Client - Fatal编程技术网

.net 为具有“属性”的类创建的重复属性;“数据合同”;及;“可序列化”;

.net 为具有“属性”的类创建的重复属性;“数据合同”;及;“可序列化”;,.net,wcf,wcf-client,.net,Wcf,Wcf Client,我有一个类,上面有两个属性,“DataContract”和“Serializable”。此类正在服务中使用。此服务正在被项目使用。我使用VS的“添加服务引用”功能(右键单击references--add--service reference)在项目中添加了服务引用。每当我添加服务引用时,都会在服务引用的reference.cs文件中创建该类的重复属性,1具有“DataMember”属性,另一个具有“Serializable”属性。这将导致生成错误。如果我不放置Serializable属性,那么服

我有一个类,上面有两个属性,“DataContract”和“Serializable”。此类正在服务中使用。此服务正在被项目使用。我使用VS的“添加服务引用”功能(右键单击references--add--service reference)在项目中添加了服务引用。每当我添加服务引用时,都会在服务引用的reference.cs文件中创建该类的重复属性,1具有“DataMember”属性,另一个具有“Serializable”属性。这将导致生成错误。如果我不放置Serializable属性,那么服务引用只需使用具有“DataMember”属性的类的1组属性就可以正常工作


知道为什么会发生这种情况吗?我们能做些什么来避免这种情况?请注意,这两个属性都是类所必需的,即我不能删除任何属性。

您能解释一下为什么需要这两个属性吗

DataContractSerializer
Serializable
属性配合使用效果良好

但是,要使
BinaryFormattor
工作,您需要
Serializable
属性

找到一种摆脱
DataContract
属性的方法

--编辑--

WCF
默认情况下使用
DataContractSerializer
通过通道序列化/反序列化对象。根据
MSDN
文件

@


因此,要使WCF正常工作,您可以去掉DataContract。

@Samar最好的方法是只使用DataContract属性,因为它在内部使可序列化属性进入图片(默认情况下)。

我需要“Serializable”属性来创建对象和“DataContract”的深度克隆属性,以便我可以在WCF服务中使用它。你能给我一些摆脱“DataContract”属性的方法吗?因为据我所知,在WCF服务中使用一个没有“DataContract”属性的类来传输数据是不可能的。我在这里和我的同事讨论过,他们说如果我们只保留“Serializable”属性,那么性能会受到影响,而且它会变得和web服务一样好。此外,它还存在一些问题,无法对某些类型进行属性序列化。属性上的“DataMember”属性也不能与类上的“Serializable”属性一起使用。属性还需要标记为“可序列化”。所有这些都正确吗?我尝试过这样做,但问题是,当我只保留DataContract属性时,我无法创建类的深层副本。您必须知道,创建深度副本需要将该类标记为可序列化,并且当我尝试创建深度副本时。net表示该类未序列化,即使我已将该类标记为DataContract。有什么理由让它这样做吗?
// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the DataContractSerializer.