Вы можете использовать расширение ASDF «система определения пакетов»: https://common-lisp.net/project/asdf/asdf/The-package_002dinferred_002dsystem-extension.html#The-package_002dinferred_002dsystem-extension [110 ]. Для этого вам придется придерживаться соглашения об именах каталогов и файлов, но оно (внешне) немного ближе к тому, как такие вещи организованы на других языках.
Я должен признать, что предпочитаю явное расположение в файле asd, потому что оно четко разделяет понятия систем, пакетов и файлов.
Я использую анонимные типы для этого:
var customer = from c in serviceLayer.GetCustomers()
where c.Id == id.Value
select new { FirstName = c.FirstName };
Это не просто хорошая идея. Скорее это - защита от исключения, которое Вы получите при вызове Json (), если граф объектов будет содержать циклическую ссылку.
Используйте модель представления. Модель представления является объектом что использование UI для представления объектов области на экране. Каждый экран имеет свою собственную модель представления.
При создании модели представления которая является DTO, который является сглаженной, пустой безопасной проекцией объектов области, не отображайте свойства, Вы не хотите быть отображенными на экране.
Сериализируйте модель представления, не Ваш объект области.
Вы могли пользоваться библиотекой 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; } }
}
Один из вариантов - создать список указателей на элементы (предпочтительно 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] только в класс групп, а не в класс пользователей ..
In my experience, the JavaScriptSerializer respects some of the XmlSerialization attributes such as XmlIgnore too.
Вы можете использовать атрибут [ScriptIgnore] (в System.Web.Extensions). См. http://www.creave.dk/post/2009/10/07/Excluding-properties-from-being-serialized-in-ASPNET-MVC-JsonResult.aspx для примера.
]