c# – WCF Xml序列化和自动实现的属性

我正在尝试使用WCF RESTful Web服务,而我遇到了自动实现属性的问题.

我有一个名为DeviceDescriptor的类,定义如下:

public class DeviceDescriptor
{
    public string DeviceId { get; set; }
    public string DisplayName { get; set; }
}

我有一个RESTful WCF服务,应该返回一个DeviceDescriptors列表 – 这是我的服务合同:

[ServiceContract]
public interface IChooser
{
[WebGet(UriTemplate="/Chooser/RegisteredDevices")]
[OperationContract]
List<DeviceDescriptor> RegisteredDevices();

[WebGet(UriTemplate = "/Chooser/Ping")]
[OperationContract]
string Ping();
}

好吧,它有点工作,除了在XML输出中,属性名称不正确,看起来序列化程序使用自动生成的支持字段的“不可知名称”而不是属性名称.我的输出如下:

<DeviceDescriptor>
  <_x003C_DeviceId_x003E_k__BackingField>Pipe.Dome</_x003C_DeviceId_x003E_k__BackingField> 
  <_x003C_DisplayName_x003E_k__BackingField>Pipe diagnostic tool</_x003C_DisplayName_x003E_k__BackingField> 
</DeviceDescriptor>

那么,有没有办法解决这个问题呢?为什么没有; WCF使用属性名称?

最佳答案
它使用反射来获取它们IIRC,如果你想要更多控制你应该尝试使用DataContract,它允许你指定确切的名称(使用[DataMember(Name =“DeviceID”)]).另请参阅DataMemberAttribute上的文档

转载注明原文:c# – WCF Xml序列化和自动实现的属性 - 代码日志