Странный случай LINQ to SQL, который я когда-либо видел - PullRequest
1 голос
/ 28 мая 2010

ОК, так что это самая странная проблема в программировании .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".

Я схожу с ума или это нормальное поведение?

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 28 мая 2010

Да, это так. :-( По крайней мере для элементов десериализатора SOAP во Flex SDK 3.6.0.x.

1 голос
/ 28 мая 2010

Я имел в виду в предыдущем посте, что - независимо от того, все ли в порядке со спецификацией SOAP / WSDL - Flex SDK ожидает

<sequence>

дочерние элементы должны предоставляться в порядке, определенном в WSDL.

1 голос
/ 28 мая 2010

Я думаю, вы не должны полагаться на порядок сериализации. На самом деле это не имеет значения для правильной десериализации.

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