Tôi đang cố sử dụng gói gói NETFx Json.NET MediaTypeFormatter để hoán đổi DataContractJsonSerializer mặc định trong dịch vụ WCF REST của tôi (khung 4.0). Tôi đã tải xuống gói trong dự án của mình và thêm các dòng mã sau vào tệp Global.asax.Trình nối tiếp JSON.NET cho các Dịch vụ REST của WCF
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes();
// Create Json.Net formatter serializing DateTime using the ISO 8601 format
var serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new IsoDateTimeConverter());
var config = HttpHostConfiguration.Create();
config.Configuration.OperationHandlerFactory.Formatters.Clear();
config.Configuration.OperationHandlerFactory.Formatters.Insert(0, new JsonNetMediaTypeFormatter(serializerSettings));
}
Nhưng khi tôi chạy dịch vụ, nó vẫn sử dụng DataContractJsonSerilizer để tuần tự hóa. Dưới đây là lớp tôi đang trở về từ dịch vụ của tôi.
[DataContract]
public class SampleItem
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string StringValue { get; set; }
[DataMember]
public DateTime DateTime { get; set; }
}
Dưới đây là phản hồi từ dịch vụ trong Fiddler.
Bạn có thể thấy rằng DateTime không có trong định dạng ISO mà tôi đã xác định trong serializerSettings trong đoạn code trên. Điều này cho tôi biết rằng serializer JSON.NET không được sử dụng để tuần tự hóa các đối tượng.
Sẽ đánh giá cao bất kỳ trợ giúp nào.
Thực ra tôi đã xảy ra với kịch bản tương tự, nhưng các dịch vụ WCF của tôi được lưu trữ trong Windows Service. Đoạn mã trên ném ngoại lệ sau: "System.InvalidOperationException: 'ServiceHostingEnvironment.EnsureServiceAvailable' không thể được gọi trong môi trường lưu trữ hiện tại. API này yêu cầu ứng dụng gọi được lưu trữ trong IIS hoặc WAS." Bất kỳ ý tưởng nào? –