所以我试试这个HttpResponseMessage并且它工作正常,只要我不在Content属性中放任何东西。但我现在需要它在消息的内容中返回一个json。
我的代码如下所示:
public HttpResponseMessage GetMemberById()
{
string id = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["id"];
List<ClubMember> ls = KCBLL.Instance.FindMemberById(id);
HttpResponseMessage MessageRetour = new HttpResponseMessage();
if (ls.Count == 1)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(ls.First());
MessageRetour.Content = new StringContent(json, Encoding.UTF8);
MessageRetour.StatusCode = HttpStatusCode.OK;
return MessageRetour;
}
}
界面
[OperationContract]
[WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "GetMemberById")]
HttpResponseMessage GetMemberById();
最后是班级
[DataContract]
public class ClubMember
{
[DataMember]
public long MemberId { get; set; }
[DataMember]
public string MemberNumber { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
任何帮助将不胜感激
答案 0 :(得分:0)
我花了一段时间,但我明白了。
它之所以不起作用,是因为HttpResponseMessage中的HttpContent是抽象的(它也解释了为什么Message类也不能正常工作)。 WCF的DataContractAttribute自动转换器不知道如何处理抽象类。 我找到了解决此问题的2种方法。
1.使用Newtonsoft的JsonConvert将Message类型保留为Return
2.Custom类包含您的对象,使用自定义接口(或抽象类)并使用KnowType属性。或者使用Message和HttpResponseMessage的接口/抽象类。
更干净的方式,但它是最长的。