ScriptIgnore в LINQ to SQL - PullRequest
       19

ScriptIgnore в LINQ to SQL

3 голосов
/ 10 августа 2010

У меня есть объект LINQ to SQL, который я буду сериализовать и возвращать как JSON через вызов веб-службы.

На этом объекте есть одно свойство, которое я бы не хотел сериализовать. Для этого обычно есть атрибут [ScriptIgnore], который работает именно так, как я хочу, если я добавлю его вручную в файл designer.cs.

Теперь, поскольку файл конструктора создается автоматически, я бы предпочел не редактировать его вручную, поскольку любые изменения могут быть легко перезаписаны. Мой вопрос таков: есть ли способ аннотировать свойство, чтобы оно исключалось при сериализации, прямо в редакторе DBML?

Если ответ - нет; Существуют ли какие-либо решения для этого, которые лучше, чем ручное задание свойства null перед его сериализацией или возвращение идентичного анонимного типа, за исключением этого одного свойства? В MVC.NET есть ли способ передать параметры в метод JSON(), чтобы изменить его поведение, случайно?

Приношу свои извинения, если об этом уже спрашивали - я бы ожидал, что это будет распространенный вопрос, но я не смог найти никого подобного.

Ответы [ 3 ]

2 голосов
/ 10 августа 2010

Все сгенерированные DBML классы являются частичными классами, так что вы можете расширить их в другом файле.Дизайнер DBML будет изменять только классы в файле Designer.cs.Удалите свойство из конструктора DBML и поместите его в частичный класс в другом файле.Затем вы можете добавить любые дополнительные атрибуты, которые пожелаете, и дизайнер DBML оставит это в покое.Вам придется вручную управлять этим свойством и обновлять его, чтобы оно соответствовало любым изменениям в базе данных, но я думаю, что это, вероятно, стоит заплатить, если она решит вашу проблему.

1 голос
/ 10 августа 2010

Если вы не добьетесь успеха с partial классами (что, вероятно, является лучшим способом), то вы можете просто сериализовать дату самостоятельно. Известно, что ASP.NET MVC использует JavaScriptSerializer для сериализации данных. JavaScriptSerializer имеет простые и приятные функции настройки, такие как JavaScriptConverter , и вы можете очень легко преобразовать объект в нечто менее стандартное (см., Например, использование тегов Attr для json? или другие темы ).

Чтобы максимально соответствовать стандартам, вы можете определить класс, полученный из JsonResult (например, как здесь ASP.net MVC, возвращающий JSONP или http://dev.qsh.eu/Blogs/Dmitry-P/January-2010/ASP-NET-MVC-Tip--3.aspx) и сохранить сериализованные данные в context.HttpContext.Response напрямую методом * 1016. * Тогда вы абсолютно свободны в том, как сериализовать данные в JSON.

0 голосов
/ 01 декабря 2012

Вместо использования приведенного выше частичного ответа на класс вы можете попробовать перейти в конструктор DBML и установить модификатор доступа для свойства от открытого к внутреннему.Я сделал это для свойств отношений таблица-таблица, и это помогло мне избежать циклических ссылок при сериализации моих объектов в JSON.

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