Я нашел обходной путь, но в начале этой недели у меня возникли проблемы при работе с FluorineFx , где у меня был объект, сгенерированный Linq-to-SQL, который я хотел отправить по проводнику во Flash. Этот объект содержал свойство, в котором Flash не нуждался:
[Association(Name="User_UserEntry", Storage="_UserEntries",
ThisKey="UserID", OtherKey="UserID")]
public EntitySet<UserEntry> UserEntries { ... }
Но Flex не смог справиться с повторной накачкой этого типа, бросив:
ArgumentError: Ошибка № 2173: невозможно прочитать объект в потоке. Класс flex.messaging.io.ArrayCollection не реализует flash.utils.IExternalizable, но имеет псевдоним для внешнего класса.
Теперь мне не нужно было отправлять свойство по проводам, поэтому я попробовал шаги, которые Марк Гравелл предложил в выпуск 456624 , сначала добавив к нему атрибуты, используя MetadataTypeAttribute в System.ComponentModel.DataAnnotations (найдено из комментария JasonW к выпуск 393687 :
[MetadataType(typeof(UserMetadata)]
public partial class User { }
internal class UserMetadata
{
[FluorineFx.Transient]
public EntitySet<UserEntry> UserEntries { get; set; }
}
К сожалению, похоже, что FluorineFx пока не поддерживает атрибуты метаданных (что неудивительно, они довольно новые).
В итоге мне пришлось создать отдельное DTO со всеми свойствами, о которых заботился Flash, и ни с одним из свойств, которых он не имел. Не самое элегантное из решений.
Итак, другие люди сталкивались с этой проблемой, и вы нашли более изящные способы ее решения?