我通过使用此问题答案中提供的技术解决了这个问题:
这是我上的课:
/// <summary>/// Similiar to <see cref="JsonResult"/>, with/// the exception that the <see cref="DataContract"/> attributes are/// respected./// </summary>/// <remarks>/// based on the excellent stackoverflow answer:/// https://stackoverflow.com/a/263416/1039947/// </remarks>public class JsonDataContractActionResult : ActionResult{ /// <summary> /// Initializes a new instance of the class. /// </summary> /// <param name="data">Data to parse.</param> public JsonDataContractActionResult(Object data) { Data = data; } /// <summary> /// Gets or sets the data. /// </summary> public Object Data { get; private set; } /// <summary> /// Enables processing of the result of an action method by a /// custom type that inherits from the ActionResult class. /// </summary> /// <param name="context">The controller context.</param> public override void ExecuteResult(ControllerContext context) { if (context == null) throw new ArgumentNullException("context"); var serializer = new DataContractJsonSerializer(Data.GetType()); string output; using (var ms = new MemoryStream()) { serializer.WriteObject(ms, Data); output = Encoding.UTF8.GetString(ms.ToArray()); } context.HttpContext.Response.ContentType = "application/json"; context.HttpContext.Response.Write(output); }}
用法:
public ActionResult TestFunction() { var testObject = new TestClass(); return new JsonDataContractActionResult(testObject); }
我还必须修改初始类:
// -- The DataContract property was added --[DataContract]public class JsonTreeNode{ [DataMember(Name = "title")] public string Title { get; set; } [DataMember(Name = "isFolder")] public bool IsFolder { get; set; } [DataMember(Name = "key")] public string Key { get; set; } [DataMember(Name = "children")] public IEnumerable<JsonTreeNode> Children { get; set; } [DataMember(Name = "select")] public bool SelectedonInit { get; set; }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)