您必须在System.Configuration.ConfigurationLockCollection上实现默认访问器,因为它继承自ICollection

时间:2011-05-12 18:06:38

标签: vb.net wcf web-services visual-studio-2010

我一直在网上寻找这个错误很长一段时间。我似乎无法想出这个。

我在vs 2010中使用vb.net创建了一个Web服务。以下是我的属性

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

当我尝试将此作为服务添加到Web应用程序时,也在使用vb.net的vs2010中完成,我在标题中收到错误。请帮忙。我不确定实现默认访问器需要什么。

3 个答案:

答案 0 :(得分:1)

我一直在努力解决类似的问题。我有一个继承自ConfigurationSection的类,但是当我尝试将它与XMLSerializer一起使用时,我得到了相同的错误消息。

我认为这个问题无法在班上解决。问题在于祖先的属性(ConfigurationSection)。它有4个ConfigurationLockCollection类型的公共属性(即LockAllAttributesExcept,LockAllElementsExcept,LockAttributes和LockElements)。在序列化期间,序列化程序发现这些属性实现ICollection但没有必需的默认访问器,因此是例外。

就我而言,我尝试使用XMLIgnore()来遮蔽这4个属性并进行装饰,但仍然会遇到同样的问题。 AFAIK将无法序列化继承自ConfigurationSection的任何类,直到MS将默认访问者添加到ConfigurationLockCollection。

现在我将实现我自己的方法,只从我的自定义配置部分序列化我需要的属性。

答案 1 :(得分:0)

我没有使用VB.net,但一般来说,ICollection是一个接口类。

接口描述了从接口继承的类需要定义的方法和属性。在您的情况下,您的derrived类MyClass需要定义默认访问者。

如果你尝试怎么办?

get
{
   return this; 
} 

答案 2 :(得分:0)

我遇到了同样的问题。我通过创建一个XML包装器对象来解决它,该对象只包含我想要序列化的属性,并创建两个方法,这些方法从unserializable对象(从ConfigurationElement派生的自定义配置元素)映射到Attribute对象并返回。 然后我可以序列化/反序列化一组简单对象。

请参阅My AnswerThis Question