gpt4 book ai didi

c# - 如何在 WCF 服务调用中忽略区分大小写的属性名称?

转载 作者:行者123 更新时间:2023-11-30 19:43:17 25 4
gpt4 key购买 nike

你好,我想知道从客户端调用 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(这可以完成,请参阅 this blog post ,但不是很容易)并使用该序列化程序中的序列化程序设置来忽略大小写。我认为您还应该能够添加其他属性(可以是私有(private)的,除非应用程序以部分信任方式运行),以映射其他支持的案例;类似于下面的代码:

[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; } }
}

关于c# - 如何在 WCF 服务调用中忽略区分大小写的属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com