C# 在VisualStudio2010中,如何删除XmlSerializer以使用DataContractSerializer?
我创建了一个.NET4.0WCFWeb服务,并将其安装在我们的内部服务器上 现在,我用一个查询web服务的简单项目来测试这一点 但是,我发现我所有的属性名都附加了k_BackingField字符串C# 在VisualStudio2010中,如何删除XmlSerializer以使用DataContractSerializer?,c#,visual-studio-2010,wcf,datacontractserializer,C#,Visual Studio 2010,Wcf,Datacontractserializer,我创建了一个.NET4.0WCFWeb服务,并将其安装在我们的内部服务器上 现在,我用一个查询web服务的简单项目来测试这一点 但是,我发现我所有的属性名都附加了k_BackingField字符串 [System.Runtime.Serialization.DataMemberAttribute(Name="<WoNumber>k__BackingField", IsRequired=true)] public string WoNumberk__BackingFie
[System.Runtime.Serialization.DataMemberAttribute(Name="<WoNumber>k__BackingField", IsRequired=true)]
public string WoNumberk__BackingField {
get {
return this.WoNumberk__BackingFieldField;
}
set {
if ((object.ReferenceEquals(this.WoNumberk__BackingFieldField, value) != true)) {
this.WoNumberk__BackingFieldField = value;
this.RaisePropertyChanged("WoNumberk__BackingField");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute(Name=“k\uu BackingField”,IsRequired=true)]
公共字符串WoNumberk_uu_BackingField{
得到{
返回这个.WoNumberk_uubackingfield;
}
设置{
if((object.ReferenceEquals(this.WoNumberk\uu backingfield,value)!=true)){
this.WoNumberk\uuu backingfield=值;
本.RaisePropertyChanged(“WoNumberk_uuBackingfield”);
}
}
}
我搜索了这个k_BackingField参数,发现这个链接是我最好的参考:
显然,我不知怎么用了而不是
我似乎找不到的是如何“撤消”XmlSerialization并启用DataContractSerializer
在我的项目中,我曾尝试在整个项目中搜索以下XML关键字,但它们似乎没有出现:
- XmlSerializerFormat
- System.Xml.Xml序列化
- XmlSerializer
或者,是否需要修改我的WCF服务,以便它公开我想要的序列化程序?问题不是您使用了
XmlSerializer
——问题是您在服务上使用了使用[Serializable]
属性声明的某些类,并且在该类上使用了自动属性
序列化程序使用的[Serializable]
属性修饰的类型的语义是其字段将被序列化(而不是其属性)。使用自动属性,编译器将生成“备份字段”,当您为服务创建代理(添加服务引用)时,默认情况下,它将尝试在服务器中创建与该协定等效的数据协定
要解决此问题,您可以通过更改服务器端代码进行以下选择:
- 不要使用
,而是使用[Serializable]
模型(这需要装饰要用[DataContract]
序列化的属性)[DataMember]
- 保持
,但不要使用属性,而是使用字段[Serializable]
- (如果适用)使用POCO序列化(将序列化公共字段/属性),不需要属性
另一种选择是在服务器和客户端之间共享合同(即,不要使用添加服务引用,并将数据/服务合同从服务项目复制到客户端)。听起来不错。因此,如果我的
[DataContract]的[DataMember]
字段之一
返回自定义类MyClass1,该类是否也必须具有[DataContract]
并使用[DataMember]声明其所有方法
装饰?我没有收到你的回复,所以你知道我做了什么吗?我试过了。首先,我在没有数据的情况下尝试了我的类-狗屎不起作用。所以,在我所有的属性上粘贴[DataMember]
后,我又试了一次,[DataContract]
到类中,并给它一个声明为空的[ServiceContract]
接口。他妈的成功了!问题解决了!:)不一定,您可以在不同的类中混合/匹配序列化属性。请注意,如果将[Serializable]
添加到该类MyClass1中,您将使用[Serializable]
编程模型-即,正在序列化的字段。