Flex не может десериализовать элемент веб-сервиса, который содержит только атрибуты - PullRequest
0 голосов
/ 26 октября 2008

Я вижу очень странную проблему с веб-сервисом .NET, используемым Flex.

У меня очень простой класс, в котором нет ничего, кроме свойств с атрибутами [XmlAttribute ('xxx')].

public class OrderAddress
{
    public OrderAddress() {}

    [XmlAttribute("firstName")]
    public string FirstName { get; set; }

    [XmlAttribute("lastName")]
    public string LastName { get; set; }

    [XmlAttribute("company")]
    public string Company { get; set; }        

    [XmlAttribute("address1")]
    public string Address1 { get; set; }

    ... (more properties)
}

Проблема в том, что во Flex, когда этот объект десериализован, КАЖДЫЕ ОДНО поля в нуль-отладчике являются пустыми Экземпляр класса OrderAddress не является нулевым, просто все поля. Я на 100% уверен, что мой прокси-слой веб-службы обновлен, и по сети передаются данные на 100%, как показано Fiddler .

Очень странная вещь: если я изменю одно из этих свойств для сериализации как элемента (в отличие от XmlAttribute) и перекомпилирую ТОЛЬКО мой веб-сервис на C #, тогда данные мгновенно могут быть распознаны Flex. Если я добавлю полностью неиспользуемое поле - например, public string Foo = "foo";, то это также неожиданно сработает.

Я помню, что видел что-то подобное раньше, но не помню, успешно ли я это исправил или нет.

Для меня уже 3:30 утра, и мне нужно отложить устранение неполадок, связанных с хардкором, но выкинуть их сюда на тот случай, если это станет очевидным для любого, кто читает. Код находится в модуле, который, как я знаю, может иногда вызывать некоторые странности, но это кажется очень странным.

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

После трех дней борьбы, наконец, я понял, что этот атрибут XML стал причиной моей проблемы. Немного отличающийся от вашего, у моего класса есть массив объектов в дополнение к атрибуту XML. Flex мог генерировать прокси и даже правильно получать атрибут (он рассматривался как свойство), но не смог десериализовать элементы XML (возвращаемые из веб-службы) в массив объектов. Как только я удалил этот атрибут, все заработало нормально ... так что да, это "элементная XML-сериализация". Но есть ли способ обойти это?

0 голосов
/ 26 октября 2008

Элементно-ориентированный XML является более совместимым форматом в XML-сериализации. По этой причине новый сериализатор WCF DataContract сериализует каждое свойство как элементы вместо атрибута. Мне приписывают дескриптор элемента, а не данные для элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...