ti-enxame.com

Não é possível serializar o membro .... porque é uma interface

Eu estou tendo esse problema e puxando meu cabelo por cima dele. Eu tenho o seguinte erro:

Detalhes da exceção: System.NotSupportedException: Não é possível serializar o membro HannaPrintsDataAccess.Customer.CustomerAddresses do tipo System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress, HannaPrintsDataAccess, Versão = 1.0.0.0, Cultura = neutra, PublicKeyToken = null]] porque é uma interface.

Erro de origem:

Linha 196: Cliente do cliente = OperationsManager.Instance.CustomerService.GetCustomer (7); Linha 197: Linha 198: string xml = OperationsManager.Instance.CustomerService.GetCustomerAddressesXml (CustomerAddress.FindAll ()); Linha 199: Linha 200: ordem do pedido = OperationsManager.Instance.OrderService.CreateOrderFromCart (xml);

Arquivo de origem: c:\HostingSpaces\greetwus\galadavetiye.com\wwwroot\HannaPrints\HannaPrints\WebUI\CreateGreetingCard.aspx.cs Linha: 198

Rastreio de pilha:

[NotSupportedException: Não é possível serializar o membro HannaPrintsDataAccess.Customer.CustomerAddresses do tipo System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress, HannaPrintsDataAccess, Versão = 1.0.0.0, Cultura = neutra, PublicKeyToken = null]] porque é uma interface .]

[InvalidOperationException: não é possível serializar o membro 'HannaPrintsDataAccess.Customer.CustomerAddresses' do tipo 'System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress, HannaPrintsDataAccess, versão = 1.0.0.0, Cultura = neutra, PublicKeyToken = null]]', consulte a exceção interna para obter mais detalhes.] System.Xml.Serialization.StructModel.CheckSupportedMember (TypeDesc typeDesc, membro MemberInfo, tipo Type) +889917 System.Xml.Serialization.StructModel.GetPropertyModel (PropertyInfo propertyInfo) +132 ...... ..

Eu mudei todos os meus IList para List para ver se isso faria alguma coisa, mas ele não foi afetado, nem demorou um segundo para carregar depois de fazer essas alterações, estou supondo que o erro ocorra antes mesmo de chegar a essa parte. Eu verifiquei meus arquivos remotos para ver se estava carregando corretamente e estava.

Aqui está o código:

using System;
using System.Collections.Generic; 
using Castle.ActiveRecord;
namespace HannaPrintsDataAccess { 
    public partial class Customer { 
        private IList _customerAddresses;


        public CustomerAddress GetPrimaryCustomerAddress()
        {
            foreach (CustomerAddress address in _customerAddresses)
            {
                if (address.IsPrimary)
                    return address;
            }
            return null;
        }


        [HasMany(typeof(CustomerAddress), ColumnKey = "CustomerId", Table = "Customer")]
        public virtual IList<CustomerAddress> CustomerAddresses
        {
            get
            {
                return this._customerAddresses;
            }
            set
            {
                this._customerAddresses = value;
            }
        }
    }
}

O erro ocorre quando este código é ativado:

protected void orderButton_Click(object sender, EventArgs e)
{
    Customer customer = OperationsManager.Instance.CustomerService.GetCustomer(7);

    string xml = OperationsManager.Instance.CustomerService.GetCustomerAddressesXml(CustomerAddress.FindAll());

    Order order = OperationsManager.Instance.OrderService.CreateOrderFromCart(xml);
    OperationsManager.Instance.CartService.MoveCart("MyDesigns");

    Response.Redirect("~/Customer/PayByCreditCard.aspx?orderGuid=" + order.OrderGuid);
}

A classe CustomerAddress:

using System.IO;
using System.Xml.Serialization;
using Castle.ActiveRecord;


namespace HannaPrintsDataAccess
{
public partial class CustomerAddress
{
    public string ToXml()
    {
        XmlSerializer serializer = new XmlSerializer(GetType());
        MemoryStream memoryStream = new MemoryStream();
        serializer.Serialize(memoryStream, this);
        memoryStream.Seek(0, SeekOrigin.Begin);
        return new StreamReader(memoryStream).ReadToEnd();
    }

    [BelongsTo("CustomerId")]
    public virtual Customer Customer { get; set; }
}
}
20
anthonypliu

No código que você postou, o tipo de CustomerAddresses é IList<CustomerAdress>. Essa é uma interface. Como a mensagem de erro diz, você não pode serializar uma interface.

23
John Saunders