Asp.net VB.NET Web服务-从继承的类返回只读属性

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(

我想我错过了一些非常基本的东西,但我的困境就在这里。在VB.net中,我创建了一个继承
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