Необходимо реализовать метод доступа по умолчанию для System.Configuration.ConfigurationLockCollection, поскольку он наследуется от ICollection. - PullRequest
1 голос
/ 12 мая 2011

Я довольно долго искал онлайн об этой ошибке.Кажется, я не могу понять это.

У меня есть веб-сервис, созданный с vb.net в версии 2010 года. Вот посмотрите на мою собственность

Public Class MyClass
  Inherits ConfigurationSection
  Protected _score As Integer

 <ConfigurationProperty("score", DefaultValue:="12", IsRequired:=False), _
 IntegerValidator(ExcludeRange:=False, MinValue:=6, MaxValue:=24)>
 Property gt_score() As Integer
     Get
         Return CType(Me("score"), Integer)
     End Get
     Set(ByVal value As Integer)
         Me("score") = value
     End Set
 End Property
End Class

Когда япопробуйте добавить это в качестве службы в веб-приложение, также сделано в vs2010 с vb.net, я получаю ошибку в заголовке.Пожалуйста, помогите с этим.Я не уверен, что нужно для реализации средства доступа по умолчанию.

Ответы [ 3 ]

1 голос
/ 23 марта 2012

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

Я считаю, что эта проблема не может быть решена в вашем классе. Проблема заключается в свойствах предка (ConfigurationSection). Он имеет 4 открытых свойства типа ConfigurationLockCollection (а именно LockAllAttributesExcept, LockAllElementsExcept, LockAttributes и LockElements). Во время сериализации сериализатор обнаруживает, что эти свойства реализуют ICollection, но не имеют требуемых методов доступа по умолчанию, следовательно, исключение.

Я, со своей стороны, пытался скрыть эти 4 свойства и украсить их с помощью XMLIgnore (), но все же получил ту же проблему. AFAIK, невозможно будет сериализовать какой-либо класс, который наследуется от ConfigurationSection, пока MS не добавит средство доступа по умолчанию к ConfigurationLockCollection.

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

0 голосов
/ 23 июля 2016

Я столкнулся с той же проблемой. Я решил это, создав объект-оболочку XML, который просто содержит свойства, которые я хочу сериализовать, и создал два метода, которые сопоставляются с недериализуемым объектом (пользовательский элемент конфигурации, производный от ConfigurationElement) с объектом Attribute и обратно. Затем я могу сериализовать / десериализовать коллекцию простых объектов.

См. Мой ответ Кому Этот вопрос

0 голосов
/ 12 мая 2011

Я не работал с VB.net, но в целом ICollection - это интерфейсный класс.

Интерфейс описывает методы и свойства, которые должны определять классы, наследуемые от интерфейса. В вашем случае ваш класс MyClass должен определить метод доступа по умолчанию.

Что если вы попробуете:

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