从C#中的JsonResult中删除一个元素

时间:2016-04-28 16:14:11

标签: c# .net json asp.net-mvc json.net

我有一个JsonResult对象从MVC方法返回,但我需要在发送之前从中删除一个元素。

更新
我没有映射它就试图这样做,因为对象庞大而且非常复杂。

我怎样才能做到这一点?

例如:

public class MyClass {

   public string PropertyToExpose {get; set;}
   public string PropertyToNOTExpose {get; set;}
   public string Otherthings {get; set;}

}

JsonResult result = new JsonResult();
result = Json(myObject, JsonRequestBehavior.AllowGet);

然后从结果中删除 PropertyToNOTExpose。

从实际代码更新:

public JsonResult GetTransaction(string id)
{    
    //FILL UP transaction Object

    JsonResult resultado = new JsonResult();

    if (CONDITION USER HAS NOT ROLE) {
        var jObject = JObject.FromObject(transaction);
        jObject.Remove("ValidatorTransactionId");
        jObject.Remove("Validator");
        jObject.Remove("WebSvcMethod");
        resultado = Json(jObject, JsonRequestBehavior.AllowGet);
    } else {
        //etc.
    }
    return resultado;
}

2 个答案:

答案 0 :(得分:7)

您可以创建一个新对象,不包括您不希望在结果中发送的属性...

var anonymousObj = new {
   myObject.PropertyToExpose,
   myObject.Otherthings
};
JsonResult result = Json(anonymousObj, JsonRequestBehavior.AllowGet);

另一个选项可能是将对象转换为Newtonsoft.Json.Linq.JObject并使用JObject.Remove Method (String)删除属性

var jObject = JObject.FromObject(myObject);
jObject.Remove("PropertyToNOTExpose");
var json = jObject.ToString(); // Returns the indented JSON for this token.
var result = Content(json,"application/json");

答案 1 :(得分:2)

您可以尝试使用属性中的[ScriptIgnore]属性。这将导致JavaScriptSerializer忽略它。但是,这意味着它在反序列化时也会被忽略。我不确定这是否适合您的情况。

public class myClass 
{
   public string PropertyToExpose {get; set;}
   [ScriptIgnore]
   public string PropertyToNOTExpose {get; set;}
   public string Otherthings {get; set;}
}