Совместное использование перечисления с сервисом WCF

У меня был другой случай, когда это произошло, когда мой Toolbar был стилизован в styles.xml. Это выглядело так:

<style name="AppActionBar" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/ng_blue</item>
    <item name="theme">@style/ThemeOverlay.AppActionBar</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>

Измените name="theme" на name="android:theme" и устранили проблему.

50
задан Keith G 9 October 2008 в 14:25
поделиться

4 ответа

Пользование библиотекой Common должно быть прекрасным. Перечисления являются сериализуемыми, и атрибуты DataContract не нужны.

См.: http://msdn.microsoft.com/en-us/library/ms731923.aspx

Перечисляемые типы. Перечисления, включая перечисления флага, являются сериализуемыми. Дополнительно, перечисляемые типы могут быть отмечены с атрибутом DataContractAttribute, в этом случае каждый участник, который участвует в сериализации, должен быть отмечен с атрибутом EnumMemberAttribute

РЕДАКТИРОВАНИЕ: Несмотря на это, не должно быть никакой проблемы с маркировкой перечисления как DataContract и наличие клиентских библиотек с помощью него.

46
ответ дан Benjamin Gale 7 November 2019 в 20:43
поделиться

У меня возникла довольно странная проблема, и я подумал, что она может быть вам интересна. У меня также были проблемы с тем, что я получал остановку соединения, когда я использовал перечисления в своем контракте данных. Мне потребовалось довольно много времени, чтобы выяснить, в чем была настоящая проблема: Я использовал перечисления с присвоенными значениями int. Они начинались с 1 вместо 0. Очевидно, что WCF требует, чтобы для сериализации было значение enum, равное 0. Если вы не укажете никаких значений в вашем перечислении, автоматическое отображение значения int будет сделано для вас, начиная с 0, так что все в порядке. Но когда вы скопируете другое определение перечисления, где значение 0 не назначено, вы не получите его для вашего клиента через WCF - странно, но факт!

34
ответ дан 7 November 2019 в 10:43
поделиться

У меня, должно быть, были некоторые проблемы с устаревшей сервисной ссылкой или чем-то. Я возвратился и создал общую библиотеку, содержащую перечисление, и все хорошо работает. Я просто добавил ссылку использования на сервисный файл интерфейса.

using Common;  

[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
    [OperationContract]
    ServiceMethod1( MyEnum e, string sUserId, string sSomeData);
}

и я отбросил следующее:

[DataContract]
public enum MyEnum{ [EnumMember] red, [EnumMember] green, [EnumMember] blue };

я предполагаю, так как на перечисление ссылаются через ServiceKnownType, оно не должно было быть повышено во внешней библиотеке с [DataContract] или [Перечислитель]

35
ответ дан Keith G 7 November 2019 в 20:43
поделиться

Вы могли присвоить международные значения своим Перечислимым участникам и просто использовать интервал для передачи и когда необходимый бросок их назад в Ваш Перечислимый тип

0
ответ дан Joachim Kerschbaumer 7 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: