Фильтрация свойств из Dto перед выводом в формате Json - PullRequest
1 голос
/ 03 июня 2011

У меня есть REST API для предоставления данных котировок. Иногда API может принимать конкретные параметры для предоставления данных.

Общее использование: http://blah.com/quotes?symbol=MSFT

Специальное использование: http://blah.com/quotes?symbol=MSFT&params=[Symbol,Sector,Industry]

DTO:

public class QuoteDto 
{
    public string CompanyName { get; private set; }
    public string Symbol { get; private set; }
    public string Exchange { get; private set; }
    public string Sector { get; private set; }
    public string Industry { get; private set; }
    . . . 
}

во время общего пользования я просто сериализую свой DTO в Json. Но когда я получаю конкретный запрос, как я могу отфильтровать нежелательные параметры из моего dto перед сериализацией ??

есть ли сторонние библиотеки для этого? Я могу использовать рефлексию, но это путь к воньке. Я использую ASP.NET MVC и C #

Ответы [ 2 ]

0 голосов
/ 04 июня 2011

Я немного использую NHibernate, но это больше, чем нужно для отправки всего в JSON.

Будучи хакером, я люблю использовать Dictionary<string, object>, а затем просто добавлять участников, которых хочу отправить вниз.

return Json(someDict);
0 голосов
/ 04 июня 2011

Используйте сочетание двух техник - во-первых, написать свой собственный результат JSON.

Управляющий сериализатор в JsonResult или функция Json в ASP.Net MVC?

http://brianreiter.org/2011/01/03/custom-jsonresult-class-for-asp-net-mvc-to-avoid-maxjsonlength-exceeded-exception/

Во-вторых, вместо использования для ex. javascriptserializer, вы, в свою очередь, будете использовать JSON.Net для выполнения сериализации вручную. Таким образом, вы можете исключить любые свойства, которые вы хотите, на основе ваших правил. Блок кода с их сайта показывает, что его довольно просто сериализовать. http://james.newtonking.com/projects/json/help/ReadingWritingJSON.html

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);

using (JsonWriter jsonWriter = new JsonTextWriter(sw))
{
  jsonWriter.Formatting = Formatting.Indented;
  jsonWriter.WriteStartObject();
  jsonWriter.WritePropertyName("CPU");
  jsonWriter.WriteValue("Intel");

  jsonWriter.WritePropertyName("PSU");
  jsonWriter.WriteValue("500W");

  jsonWriter.WritePropertyName("Drives");
  jsonWriter.WriteStartArray();

  jsonWriter.WriteValue("DVD read/writer");
  jsonWriter.WriteComment("(broken)");

  jsonWriter.WriteValue("500 gigabyte hard drive");
  jsonWriter.WriteValue("200 gigabype hard drive");

  jsonWriter.WriteEnd();

  jsonWriter.WriteEndObject();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...