Лучший способ отфильтровать объекты области для вывода json в приложении MVC ASP.NET

Вы можете использовать расширение ASDF «система определения пакетов»: https://common-lisp.net/project/asdf/asdf/The-package_002dinferred_002dsystem-extension.html#The-package_002dinferred_002dsystem-extension [110 ]. Для этого вам придется придерживаться соглашения об именах каталогов и файлов, но оно (внешне) немного ближе к тому, как такие вещи организованы на других языках.

Я должен признать, что предпочитаю явное расположение в файле asd, потому что оно четко разделяет понятия систем, пакетов и файлов.

8
задан Todd Smith 16 December 2008 в 22:50
поделиться

6 ответов

Я использую анонимные типы для этого:

var customer = from c in serviceLayer.GetCustomers()
               where c.Id == id.Value
               select new { FirstName = c.FirstName };

Это не просто хорошая идея. Скорее это - защита от исключения, которое Вы получите при вызове Json (), если граф объектов будет содержать циклическую ссылку.

19
ответ дан 5 December 2019 в 05:35
поделиться

Используйте модель представления. Модель представления является объектом что использование UI для представления объектов области на экране. Каждый экран имеет свою собственную модель представления.

При создании модели представления которая является DTO, который является сглаженной, пустой безопасной проекцией объектов области, не отображайте свойства, Вы не хотите быть отображенными на экране.

Сериализируйте модель представления, не Ваш объект области.

4
ответ дан 5 December 2019 в 05:35
поделиться

Вы могли пользоваться библиотекой Newtonsoft и [JsonIgnore] атрибут для маркировки свойств Вашего класса, который Вы не хотите выставлять. Существуют другие библиотеки (с возможным другим свойством, игнорируют название атрибута), я лично предпочитаю этого, так как это очень гибко в расширениях преобразователя JSON и т.д. +, оно может легко сериализировать анонимные объекты.

public class Customer
{
    ...
    [JsonIgnore]
    public string UrlIn { get; set; }
    public string FirstName { get; set; }
    // following example of a converter, you could write your own as well
    [JsonConverter(typeof(Newtonsoft.Json.Converters.JavaScriptDateTimeConverter))]
    public DateTime Created { get { return _created; } }
}
1
ответ дан 5 December 2019 в 05:35
поделиться

Один из вариантов - создать список указателей на элементы (предпочтительно shared_ptr). Это не совсем то, что вам нужно, но с этим можно справиться.

Web;

с использованием System.Web.Script.Serialization;

с использованием System.Runtime.Serialization;

пространство имен RAPortal.Core.Entities

{

группа открытого класса

{

   private int _groupId;

   private string _name;

   private IList<User> _users;

   public virtual int GroupId

   {

       get

       {

           return _groupId;

       }

       set

       {

           _groupId = value;

       }

   }

   public virtual string Name

   {

       get

       {

           return _name;

       }

       set

       {

           _name = !String.IsNullOrEmpty(value) ? value.ToUpper().Trim() : null;

       }

   }

   [ScriptIgnore]

   public virtual IList<User> Users

   {

       get

       {

           return _users;

       }

       set

       {

           _users = value;

       }

   }

}

}

Так как User упоминается в группах ... json считает, что это круговая ссылка, и генерирует исключение ... поэтому исправление состоит в том, чтобы добавить [ScriptIgnore] поверх User. И добавьте ссылку и пространство имен к этому классу, как он ..

Это решило мою проблему .. Я уверен, что есть способы получше !!! Ура ...

И помните, что вы должны добавлять [scriptIgnore] только в класс групп, а не в класс Users ..

json думает, что это круговая ссылка, и это вызовет исключение .. поэтому исправление состоит в том, чтобы добавить [ScriptIgnore] поверх User. И добавьте ссылку и пространство имен к этому классу, как он ..

Это решило мою проблему .. Я уверен, что есть способы получше !!! Ура ...

И помните, что вы должны добавлять [scriptIgnore] только в класс групп, а не в класс Users ..

json думает, что это круговая ссылка, и она вызовет исключение .. поэтому исправление состоит в том, чтобы добавить [ScriptIgnore] поверх User. И добавьте ссылку и пространство имен к этому классу, как он ..

Это решило мою проблему .. Я уверен, что есть способы получше !!! Ура ...

И помните, что вы должны добавлять [scriptIgnore] только в класс групп, а не в класс пользователей ..

0
ответ дан 5 December 2019 в 05:35
поделиться

In my experience, the JavaScriptSerializer respects some of the XmlSerialization attributes such as XmlIgnore too.

0
ответ дан 5 December 2019 в 05:35
поделиться

Вы можете использовать атрибут [ScriptIgnore] (в System.Web.Extensions). См. http://www.creave.dk/post/2009/10/07/Excluding-properties-from-being-serialized-in-ASPNET-MVC-JsonResult.aspx для примера.

]
6
ответ дан 5 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: