ОК, так что это самая странная проблема в программировании .net, которую я когда-либо видел. Кажется, что поля объекта сериализуются в веб-сервисах .net в порядке инициализации поля.
Все началось с того, что Flex не принял SOAP-ответ от веб-службы .net. Я выяснил, что это было связано с порядком сериализованных полей, в которых определялся порядок полей в объявленном сериализуемом классе.
Это было как-то связано с общими списками и LINQ to SQL, но я не могу узнать, что. Этот действительно трудно воспроизвести.
Пример, чтобы получить идею:
[Serializable]
public class SomeSample
{
public int A;
public int B;
public int C;
}
Я запрашивал некоторые таблицы данных в веб-сервисе asmx, используя linq и возвращая список объектов SomeSample:
var r = (from ...... select new SomeSample { A = 1, C = 3 }).ToList();
Теперь список был еще раз повторен, и в поле B было применено некоторое значение (напр. 2).
Однако возвращенный мыльный конверт содержал следующую выдержку:
<A>1</A><C>3</C><B>2</B>
Обратите внимание на порядок сериализации. Если я изначально инициализировал все поля:
var r = (from ...... select new SomeSample { A = 1, B = 2, C = 3 }).ToList();
объект был сериализован в правильном порядке.
Я должен добавить, что в обоих случаях отладчик показывает абсолютно одинаковое содержимое переменной "r".
Я схожу с ума или это нормальное поведение?
Заранее спасибо.