我想有些东西比Jarrett建议的要多一点,所以这就是我所做的:
JsonDataContractActionResult:
public class JsonDataContractActionResult : ActionResult
{
public JsonDataContractActionResult(Object data)
{
this.Data = data;
}
public Object Data { get; private set; }
public override void ExecuteResult(ControllerContext context)
{
var serializer = new DataContractJsonSerializer(this.Data.GetType());
String output = String.Empty;
using (var ms = new MemoryStream())
{
serializer.WriteObject(ms, this.Data);
output = Encoding.Default.GetString(ms.ToArray());
}
context.HttpContext.Response.ContentType = "application/json";
context.HttpContext.Response.Write(output);
}
}
JsonContract()方法,添加到我的基本控制器类:
public ActionResult JsonContract(Object data)
{
return new JsonDataContractActionResult(data);
}
示例用法:
public ActionResult Update(String id, [Bind(Exclude="Id")] Advertiser advertiser)
{
Int32 advertiserId;
if (Int32.TryParse(id, out advertiserId))
{
// update
}
else
{
// insert
}
return JsonContract(advertiser);
}
注意:如果您正在寻找比JsonDataContractSerializer更高性能的东西,那么您可以使用JSON.NET来做同样的事情。虽然JSON.NET似乎没有使用DataMemberAttribute,但它有自己的JsonPropertyAttribute,可以用来完成同样的事情。
检查出新发布的Sierra:http://kohari.org/2009/08/10/siesta-painless-rest-via-asp-net-mvc/ – 2009-08-19 22:28:29
这看起来很有前途(也很有趣!),但是我希望获得已经出炉的东西。任何方式让现有的序列化器尊重DataContract属性? – 2009-08-19 22:34:52