編輯:使用您自己的MediaTypeFormatter
嘗試。您可以使用sharpSerializer或Json.NET。有資料如何做到這一點:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
http://www.asp.net/web-api/overview/advanced/configuring-aspnet-web-api
編輯注:下面的代碼是針對MVC控制器,不是的WebAPI ApiController。
如果你沒有綁定到DataContractSerializer
,你可以使用其他的,比如json序列化。例如,你可以使用Json.NET。最方便的方法是重寫默認JSON結果的行爲:
public class JsonNetResult : JsonResult
{
public JsonSerializerSettings SerializerSettings { get; set; }
public Formatting Formatting { get; set; }
public JsonNetResult()
{
Formatting = Formatting.None;
SerializerSettings = new JsonSerializerSettings();
JsonRequestBehavior = JsonRequestBehavior.DenyGet;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
if (JsonRequestBehavior == JsonRequestBehavior.DenyGet
&& String.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.");
}
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = !string.IsNullOrEmpty(ContentType)
? ContentType
: "application/json";
if (ContentEncoding != null)
response.ContentEncoding = ContentEncoding;
if (Data != null)
{
var writer = new JsonTextWriter(response.Output) { Formatting = Formatting };
var serializer = JsonSerializer.Create(SerializerSettings);
serializer.Serialize(writer, Data);
writer.Flush();
}
}
然後在您的控制器類重寫的Json方法:
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
return new JsonNetResult
{
ContentType = contentType,
ContentEncoding = contentEncoding,
Data = data
};
}
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new JsonNetResult
{
ContentType = contentType,
ContentEncoding = contentEncoding,
Data = data,
JsonRequestBehavior = behavior
};
}
而且使用這樣的:
public ActionResult GetObjectByNr(int id)
{
return Json(this._businessObject.SearchForObject(id), JsonRequestBehavior.AllowGet);
}
你能發佈確切的錯誤/例外,沒有內在的原因你不能序列化一個接口,想想有多少控制器的操作返回'IEnumerable'。 –
2014-10-06 13:40:42
接口不可序列化。它們只是一個對象實現的契約。 – 2014-10-06 13:42:02
也許我錯誤地敘述了它,但是您可以序列化一個實現接口的對象,而無需知道任何有關實現的信息。 – 2014-10-06 13:47:48