我有WCF Rest服务。我的Datacontract对象是
[DataContract(Name = "Z")]
public class User
{
[DataMember(Name = "A", EmitDefaultValue = false)]
public int UserName{ get; set; }
[DataMember(Name = "B", EmitDefaultValue = false)]
public int Address{ get; set; }
}
当我消费服务(休息呼叫)时,我得到了响应
{“A”:“TestName”,“B”:“India”}。
但我希望像这样回复
{“userName”:“TestName”,“Address”:“India”}。
如何获得以上回复。我不想删除模型对象的数据注释,因为我的旧客户端正在使用WCF服务。
提前致谢。
我尝试使用以下代码
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.Remove(config.Formatters.JsonFormatter);
config.Formatters.Clear();
config.Formatters.Add(new NewtonsoftJsonFormatter());
* NewtonsoftJsonFormatter是从MediatypeForamtter扩展而来的 但没用。它仍采用默认的.net序列化器。有什么帮助吗?
答案 0 :(得分:0)
更改响应中某个属性的名称是对WCF服务合同的重大更改。在形式上,您希望对您的服务进行版本控制,以便旧客户端像往常一样继续工作,但新客户端会选择新功能。在Stack Overflow的其他地方讨论了WCF服务的版本控制(例如Best practices for versioning your services with WCF?),但是在最简单的层面上,您可以在服务上创建一个返回新合同的新方法(同时在其他方面与现有方法的行为相同)方面):
[DataContract(Name = "SomethingMoreSensible")]
public class User
{
[DataMember(Name = "userName", EmitDefaultValue = false)]
public int UserName{ get; set; }
[DataMember(Name = "Address", EmitDefaultValue = false)]
public int Address{ get; set; }
}
新客户端被路由到这个新方法(通过明确地给他们一个不同的URL去,或者可能更聪明的东西)。