Невозможно сериализовать элемент … потому что это интерфейс

У меня была эта проблема, и я вытягивал свои волосы. У меня есть следующая ошибка:

Сведения об исключении: System.NotSupportedException: не может сериализовать член HannaPrintsDataAccess.Customer.CustomerAddresses типа System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress, HannaPrintsDataAccess, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]], потому что это интерфейс.

Ошибка источника:

Строка 196: Клиент клиента = OperationsManager.Instance.CustomerService.GetCustomer (7); Строка 197: строка 198: строка xml = OperationsManager.Instance.CustomerService.GetCustomerAddressesXml (CustomerAddress.FindAll ()); Строка 199: строка 200: порядок заказа = OperationsManager.Instance.OrderService.CreateOrderFromCart (xml);

Исходный файл: c: \ HostingSpaces \ greetwus \ galadavetiye.com \ wwwroot \ HannaPrints \ HannaPrints \ WebUI \ CreateGreetingCard.aspx.cs Строка: 198

Трассировки стека:

[NotSupportedException: не может сериализовать член HannaPrintsDataAccess.Customer.CustomerAddresses типа System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress, HannaPrintsDataAccess, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]], потому что это интерфейс .]

[InvalidOperationException: не может сериализовать член «HannaPrintsDataAccess.Customer.CustomerAddresses» типа «System.Collections.Generic.IList`1 [[HannaPrintsDataAccess.CustomerAddress, HannaPrintsDataAccess, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null]] ‘, см. внутреннее исключение для более подробной информации.] System.Xml.Serialization.StructModel.CheckSupportedMember (TypeDesc typeDesc, член MemberInfo, тип типа) +889917 System.Xml.Serialization.StructModel.GetPropertyModel (PropertyInfo propertyInfo) +132 …… ..

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

Вот код:

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 CustomerAddresses { get { return this._customerAddresses; } set { this._customerAddresses = value; } } } } 

Ошибка возникает, когда этот код активирован:

 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); } 

Класс 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; } } } 

В опубликованном вами коде, тип CustomerAddresses – это IList . Это интерфейс. Как и сообщение об ошибке, вы не можете сериализовать интерфейс.

Не источник вашей проблемы, но вам нужно

 using (MemoryStream memoryStream = new MemoryStream()) { serializer.Serialize(memoryStream, this); memoryStream.Seek(0, SeekOrigin.Begin); using (StreamReader reader = new StreamReader(memoryStream)) { return reader.ReadToEnd(); } } 
  • Сериализовать свойство как атрибут Xml в элементе
  • Как я сериализую значение enum как int?
  • Как сериализовать объект в XML без получения xmlns = "..."?
  • Лучшее решение для XmlSerializer и System.Drawing.Color
  • Самая элегантная XML-сериализация цветовой структуры
  • Ошибка производительности XmlSerializer при указании XmlRootAttribute
  • Сериализация XML и унаследованные типы
  • Могу ли я заставить XmlSerializer игнорировать пространство имен при десериализации?
  • Как вы сериализуете строку как CDATA с помощью XmlSerializer?
  • Создание сборки Xml Serialization как части моей сборки
  • Как сопоставить объекты XML с C #
  • Давайте будем гением компьютера.