volevo qualcosa di un po 'più cotto nel quadro di quello che Jarrett ha suggerito, quindi ecco cosa ho fatto:
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 metodo(), aggiunto alla mia classe di controller di base:
public ActionResult JsonContract(Object data)
{
return new JsonDataContractActionResult(data);
}
campione Uso:
public ActionResult Update(String id, [Bind(Exclude="Id")] Advertiser advertiser)
{
Int32 advertiserId;
if (Int32.TryParse(id, out advertiserId))
{
// update
}
else
{
// insert
}
return JsonContract(advertiser);
}
Nota: Se stai cercando qualcosa di più performante di JsonDataContractSerializer, puoi fare la stessa cosa usando JSON.NET. Sebbene JSON.NET non sembri utilizzare DataMemberAttribute, ha il proprio JsonPropertyAttribute che può essere utilizzato per realizzare la stessa cosa.
fonte
2009-08-19 23:11:07
Scopri la nuova Sierra rilasciata: http://kohari.org/2009/08/10/siesta-painless-rest-via-asp-net-mvc/ –
Questo sembra promettente (e interessante!), Ma io speravo in qualcosa già cotto. Un modo per ottenere il serializzatore esistente per rispettare gli attributi DataContract? –