2016-04-28 2 views
3

У меня есть объект JsonResult для возврата из метода MVC, но перед отправкой мне нужно удалить один элемент из него.Удалить элемент из JsonResult в C#

UPDATE:
Я пытаюсь сделать это без сопоставления его, поскольку объект является огромным и очень сложным.

Как я могу это достичь?

Для например .:

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); 

, а затем REMOVE PropertyToNOTExpose из результата.

UPDATE от реального кода:

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; 
} 

ответ

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"); 
+0

Да, но объект является hughe, и я пытался избежать карты. Вот почему я хочу его удалить. –

+1

Еще одной идеей было бы сериализовать объект в «JObject» и удалить свойство, прежде чем передать его в результат. – Nkosi

+0

Этот путь был последним, который я читал, чтобы достичь –

2

Вы можете попробовать использовать атрибут [ScriptIgnore] на свой объект. Это приведет к тому, что JavaScriptSerializer проигнорирует его. Однако это означает, что он будет игнорироваться и при десериализации. Я не уверен, что это проблема для вашей ситуации или нет.

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

Спасибо, я не знал об этом, поэтому даже когда я не отвечаю, я думаю, это хороший ответ SO. На самом деле мне нужно отфильтровать некоторые элементы, если у пользователя нет роли, поэтому у меня есть небольшая условная логика. Если у пользователя есть ролл, я показываю им все, если нет, я его фильтрую –

Смежные вопросы