Циклическая ссылка в XmlSerialize

#c# #web-services #mono #poco #circular-reference

#c# #веб-сервисы #mono #poco #циклическая ссылка

Вопрос:

Я использую текстовый шаблон T4 для генерации DTO POCOs для использования в моей модели домена NHibernate.

Эти POCO должны быть отправлены клиенту с использованием веб-служб ASMX (чтобы быть совместимыми с Mono), но если я не использую XmlIgnore List<> свойства, я столкнусь с циклической ссылкой.

Есть ли какой-либо способ разрешить создание POCOs, чтобы циклическая ссылка все еще существовала на стороне клиента, но при передаче через веб-службу ссылка игнорируется.

Может быть, пользовательский XmlSerializer ? WCF недостаточно поддерживается в Mono, чтобы его можно было использовать.

 public partial class UserDTO
{

    public System.Guid ID
    {
        get;
        set;
    }

    public System.String Username
    {
        get;
        set;
    }

    public System.String Password
    {
        get;
        set;
    }
    [XmlIgnore]
    public List<InspectionDTO> Inspections
    {
        get;
        //internal set;
        set;
    }

    public ContactDTO Contact
    {
        get;
        set;
    }

    public OrganisationDTO Organisation
    {
        get;
        set;
    }
    [XmlIgnore]
    public List<RoleDTO> Roles
    {
        get;
        //internal set;
        set;
    }
}


public partial class ContactDTO
{

    public System.Guid ID
    {
        get;
        set;
    }

    public System.String FirstName
    {
        get;
        set;
    }

    public System.String LastName
    {
        get;
        set;
    }
    [XmlIgnore]
    public List<AddressDTO> Addresses
    {
        get;
        //internal set;
        set;
    }
    [XmlIgnore]
    public List<EmailDTO> Emails
    {
        get;
        //internal set;
        set;
    }
    [XmlIgnore]
    public List<UserDTO> Users
    {
        get;
        //internal set;
        set;
    }
    [XmlIgnore]
    public List<PhoneDTO> Phones
    {
        get;
        //internal set;
        set;
    }
}
  

Комментарии:

1. Итак, скажите мне еще раз, почему вы должны использовать веб-службу ASMX?

2. Я настоятельно рекомендую вам взглянуть на OpenRasta как на (ИМХО) гораздо лучшую альтернативу решениям на основе asmx или WCF

3. Привет, Джон, мне не нужно использовать веб-службу ASMX. Поскольку я использую mono, мне указали либо на ServiceStack, либо на использование реализации Mono WCF, которая не является полной реализацией WCF.