我有一个像这样的 WCF Web 服务 (.svc):
网络服务
界面
namespace Interfaces
{
[ServiceContract]
public interface IGeneral
{
[OperationContract]
[WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json)]
List<Person> GetPerson(long personID, DateTime startDate);
}
}
班级
[ScriptService]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class GeneralService : Interfaces.IGeneral
{
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
[WebMethod]
public List<Person> GetPerson(long personID, DateTime startDate)
{
List<Person> people= new List<Person>();
people.Add(new Person()
{
PersonID= 2,
StartDate= new DateTime(),
});
return people;
}
}
人
namespace Models
{
[DataContract]
public class Person
{
[DataMember]
public long PersonID{ get; set; }
[DataMember]
public DateTime StartDate{ get; set; }
}
}
我希望这会与 Json 一起回来,但它只会给出一个错误。我应该能够像这样从作为 GET 的浏览器进行测试(如您所见,我不使用输入中的参数,因此不传递它们应该没有问题):
http://localhost:2880/GeneralService/GetPerson
我这样称呼它:
客户电话
var request = {
personID: 3,
startDate: new Date(),
};
ajaxService = (function () {
var ajaxGetJson = function (method, request, callback, service) {
$.ajax({
url: getSvcUrl(service, method),
type: "GET",
data: request,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result, statusMsg, status)
{
callback(result, statusMsg, status, request)
},
error: ServiceFailed // When Service call fails
})
}
return {
ajaxGetJson: ajaxGetJson,
};
})();
ajaxService.ajaxGetJson("GetPerson", request, ModelMetricsMapper, "http://localhost:2880/GeneralService/");
更新
我有更多信息,如果我更改要返回的课程,它似乎可以工作。我解释说:如果我的类只是一个简单的类,里面有原语它不起作用,但是如果我在每个原语周围添加一个包装类......它突然起作用了。似乎响应类至少需要嵌套 2 层。
这是有效的新类:
作品
[DataContract]
public class Person {
[DataMember]
public IdClass PersonID{ get; set; }
[DataMember]
public DateClass StartDate{ get; set; }
}
为什么?
我将用一种我发现可以使用 javascriptSerializer.Serialize 并将 Strem 重新调整回客户端的方式来回答这个问题,但我真的很想要一种方法来返回一个 Person 对象,就像Dave Ward在这篇文章中所说的那样:http:/ /encosia.com/asp-net-web-services-mistake-manual-json-serialization/但我无法让它工作。
我究竟做错了什么?
谢谢你的帮助。