Почему WCF не может сериализовать long или int? - PullRequest
1 голос
/ 09 апреля 2009

Я не уверен на 100% в правильности терминологии, но ..

У меня есть класс InParams с двумя полями, строкой и long, и соответствующими им полями Access. Они украшены [DataContract] и [DataMember] соответственно.

У меня есть метод службы WCF, который называется void Test (InParams inParams)

Прокси сгенерирован нормально с помощью svcutil, и я смог установить длинное поле, однако, когда метод службы выполняется, длинное поле всегда равно 0, хотя я явно установил длинное поле. Я посмотрел на мыльный конверт и не увидел метки для моего длинного поля.

Когда я изменяю длинное поле на строковое поле, оно сериализуется. То же самое касается и целых.

Мне не хватает атрибута или чего-то еще?

Ответы [ 3 ]

2 голосов
/ 09 апреля 2009

вы можете опубликовать образец? перепроверьте:

  • убедитесь, что класс имеет [DataContract ()] украшение
  • обеспечить ОБЩЕСТВЕННЫЕ свойства имеют [DataMember ()] украшение

Убедитесь, что ваш прокси-класс обновлен, удалив / восстановив его. Смотрите, если это имеет значение?

0 голосов
/ 15 декабря 2009

Если у вас есть логическое свойство YourPropertyNameSpacified на клиенте в дополнение к YourPropertyName, вы должны установить для него значение true на клиенте. Я считаю, что это относится ко всем полям типа значения. Также см. Прокси-сервер службы WCF, не устанавливающий свойство «FieldSpecified» .

0 голосов
/ 09 апреля 2009

В дополнение к тому, что упомянул Таннер, DataContractSerializer явно поддерживает long и int.

.NET Framework примитивные типы. Следующие типы, встроенные в .NET Framework, могут быть сериализованы и считаются примитивными типами: Байт, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Boolean, Char, Decimal, Object и Строка. Ссылка

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