我有一个基于Entity框架POCO类的简单原型WCF服务。当我在没有指定响应格式的情况下运行其中一个公开的方法时,它会将XML格式的预期数据返回给浏览器。但是,如果我指定“ResponseFormat = WebMessageFormat.Json”,则不会向浏览器返回任何数据。如果我尝试使用Fiddler查看更多内容,我发现对浏览器的响应是“ReadResponse()失败:服务器没有返回对此请求的响应。”。
这是服务合同:
[ServiceContract]
public interface ITimeService
{
[OperationContract]
[WebGet(UriTemplate = "/Customer?ID={customerID}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Customer GetCustomer(string customerID);
[OperationContract]
[WebGet(UriTemplate = "/Customers", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
List<Customer> GetCustomers();
[OperationContract]
[WebGet(UriTemplate = "/Tasks/?CustomerID={customerID}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
List<Task> GetTasks(string customerID);
}
实施:
public Customer GetCustomer(string customerID)
{
var ID = new Guid(customerID);
var context = new PinPointTimeEntities();
var customer = context.Customers.Include("TimePeriods").Include("Tasks").Where(c => c.ID == ID).SingleOrDefault<Customer>();
return customer;
}
public List<Customer> GetCustomers()
{
var context = new PinPointTimeEntities();
var customers = context.Customers.ToList();
return customers;
}
public List<Task> GetTasks(string customerID)
{
var ID = new Guid(customerID);
var context = new PinPointTimeEntities();
var tasks = context.Tasks.Include("TimePeriods").Where(c => c.CustomerID == ID).ToList();
return tasks;
}
我尝试了许多建议的解决方案但没有成功。我想这是一个简单的设置或需要的东西。我需要做什么才能以json格式成功返回数据?
答案 0 :(得分:1)
我认为这个问题与自引用类有关。从我在上面的场景中看到的,并尝试使用DataContractJsonSerializer在Windows Phone上的隔离存储中存储数据,似乎JSON不处理带有循环引用的序列化类。
答案 1 :(得分:0)
我知道这个问题已经得到解答,但是......
我相信这是因为您的Customer
不可序列化。解决这个问题非常简单,只需通过将[DataContract]
标记添加到Customer
类并将[DataMember]
标记添加到您的(公共)数据字段(您希望序列化)来创建数据提取。
[DataContract]
public class Customer {
...
[DataMember]
public int CustomerID; // this field will show up in the json serialization
public string CustomerSIN; // this field will not
...
}
答案 2 :(得分:0)
我有同样的问题,我的wcf服务在将数据从Dataset转换为Json时没有正确格式化json。我通过使用以下解决方案来实现它:
String JString = Newtonsoft.Json.JsonConvert.SerializeObject(dsData);
return WebOperationContext.Current.CreateTextResponse(JString, "application/json;charset=utf-8", System.Text.Encoding.UTF8);
dsData是我的数据集
.h
和&#34;消息&#34;将是返回类型。