Asp.net VB.NET Web服务-从继承的类返回只读属性
我想我错过了一些非常基本的东西,但我的困境就在这里。在VB.net中,我创建了一个继承Asp.net VB.NET Web服务-从继承的类返回只读属性,asp.net,vb.net,Asp.net,Vb.net,我想我错过了一些非常基本的东西,但我的困境就在这里。在VB.net中,我创建了一个继承MembershipUser并从web服务返回对象的类: Public Class ModifiedUser Inherits MembershipUser 用户登录: 在web服务中创建对象时,ModifiedUser包含MembershipUser的所有属性以及新类的属性 在我的示例中,ValidateUser函数验证用户并添加其他属性: Public Function ValidateUser(
MembershipUser
并从web服务返回对象的类:
Public Class ModifiedUser
Inherits MembershipUser
用户登录:
在web服务中创建对象时,ModifiedUser
包含MembershipUser
的所有属性以及新类的属性
在我的示例中,ValidateUser
函数验证用户并添加其他属性:
Public Function ValidateUser(ByVal UserName As String, ByVal Password As String) As ModifiedUser
Dim BaseUser As MembershipUser = Membership.Provider.GetUser(UserName, False)
Dim Member As New ModifiedUser
If Membership.Provider.ValidateUser(UserName, Password) = True Then
Member = New ModifiedUser(BaseUser.ProviderName, BaseUser.UserName, BaseUser.ProviderUserKey, BaseUser.Email, BaseUser.PasswordQuestion, BaseUser.Comment, BaseUser.IsApproved, BaseUser.IsLockedOut, BaseUser.CreationDate, BaseUser.LastLoginDate, BaseUser.LastActivityDate, BaseUser.LastPasswordChangedDate, BaseUser.LastLockoutDate, 0, "", "", "", "", True)
' ... (Set new property values)
End if
Return Member
End Function
当Member
返回到Login1\u Authenticate
时,只读属性将从对象中删除,而它们将包含在从web服务返回的对象中
在web服务的reference.vb
文件中,自动生成的代码包括一个部分MembershipUser
类,该类仅包括具有关联的getter和setter的可更新属性:
Partial Public Class MembershipUser
Private emailField As String
Private commentField As String
Private isApprovedField As Boolean
Private lastLoginDateField As Date
Private lastActivityDateField As Date
如果有人能告诉我如何在返回的对象中包含只读属性,我将不胜感激。当web服务返回包含只读属性的对象时,只读属性总是被忽略。这是因为在客户端,它无法通过设置只读属性的值来反序列化数据。解决此问题的一种方法是向属性添加一个setter,该setter不执行任何操作或引发异常。例如:
Public Property Id() As Integer
Get
Return nID
End Get
Set(ByVal Value As Integer)
Throw New Exception("Cannot set read-only property 'Id'")
End Set
End Property
有关更多想法,请参见此问题:
您好,欢迎来到stack overflow!请查看我所做的编辑,以便您可以了解将来如何更好地设置问题和答案的格式。正如Steven所提到的,使用代码标记为源代码显示正确的格式。@Dayan您似乎让情况变得更糟:)@Dayan好吧,您添加了不必要的空行,虽然这更像是个人偏好,但我认为在这些堆栈溢出帖子中,缩短代码示例是有帮助的,这样您就不必滚动太多。但是你做的“更糟糕”的事情是你弄乱了方法开始行和结束行的缩进,等等:)史蒂文,谢谢你的编辑技巧和答案!这是否意味着我必须设置其他属性并将只读属性的值传递给它们,因为在包含setter时我不能覆盖现有的只读属性?基本上,对于MembershipUser类中的每个只读属性,我需要为返回的web服务对象添加一个附加属性。我是在正确的轨道上,还是误解了您的答案?是的,除了编写自己的自定义序列化逻辑之外,我认为在派生类中添加新的非只读属性可能是最好的方法。getter可以只返回基类的只读属性,setter可以抛出异常或不执行任何操作。
Public Property Id() As Integer
Get
Return nID
End Get
Set(ByVal Value As Integer)
Throw New Exception("Cannot set read-only property 'Id'")
End Set
End Property