如何在WCF服务调用中忽略区分大小写的属性名称
本文关键字:大小写 属性 略区 WCF 服务 调用 | 更新日期: 2023-09-27 18:05:14
你好,我想知道从客户端调用WCF方法的可能性,忽略大小写敏感的属性名称(在客户端,我正在使用JSON的小写属性名称,但在服务器端使用大写)。在这种情况下,WCF不能映射属性。是否可以使用一些WCF属性等?
public interface IMyWCF
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
bool UpdateUser(User user);
}
[Serializable]
[DataContract]
public class User : ICloneable
{
[DataMember]
[JsonProperty(PropertyName = "login")]
[StringLength(40, ErrorMessage = "The Login value cannot exceed 40 characters. ")]
[DefaultValue("")]
public String Login { get; set; }
[DataMember]
[JsonProperty(PropertyName = "id")]
public int UserId { get; set; }
}
您可以使用[DataMember]
属性的Name
属性来映射属性名称:
[DataContract]
public class User : ICloneable
{
[DataMember(Name = "login")]
[JsonProperty(PropertyName = "login")]
[StringLength(40, ErrorMessage = "The Login value cannot exceed 40 characters. ")]
[DefaultValue("")]
public String Login { get; set; }
[DataMember(Name = "id")]
[JsonProperty(PropertyName = "id")]
public int UserId { get; set; }
}
更新下面的注释:没有任何旋钮可以用来在WCF使用的默认序列化器上启用不区分大小写的反序列化。不过,有一些选择(没有一个是理想的)。您可以将序列化器更改为使用JSON。NET(这可以做到,请参阅这篇博客文章,但不是很容易)并使用该序列化器中的序列化器设置来忽略大小写。我认为您还应该能够添加其他属性(可以是私有的,除非应用程序在部分信任中运行),以映射额外支持的情况;类似于下面的代码:
[DataContract]
public class User
{
[DataMember]
public String Login { get; set; }
[DataMember]
private String login { get { return this.Login; } set { this.Login = value; } }
[DataMember]
public int UserId { get; set; }
[DataMember]
private int id { get { return this.UserId; } set { this.UserId = value; } }
}