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

3

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

更新:
我正在尝试在不映射的情况下完成此操作,因为该对象非常庞大且非常复杂。

我该如何做到这一点?

例如:

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个回答

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
另一个想法是将对象序列化为 JObject,然后在传递给结果之前删除属性。 - Nkosi
1
@LeandroTupone 我找到了问题并更新了我的答案。在 JObject 上调用 ToString,以获取要在结果中发送的 Json。 - Nkosi
1
你可以在客户端将字符串解析为 JSON。 - Nkosi
1
是的!非常感谢。最终我改用ActionResult,然后返回Content(json,"application/json"); - Leandro Bardelli
1
太好了。很高兴能帮忙。愉快的编程。 :) - Nkosi
显示剩余4条评论

2

您可以尝试在属性上使用[ScriptIgnore]属性。这将导致JavaScriptSerializer忽略它。然而,这意味着它也将在反序列化时被忽略。我不确定这是否对您的情况有影响。

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

谢谢,我不知道这个,所以即使没有回答我的问题,我认为这是一个很好的SO答案。 实际上,如果用户没有权限,我必须过滤一些元素,因此我有一些条件逻辑。如果用户有权限,我会显示所有内容,否则我会进行过滤。 - Leandro Bardelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接