加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在VB.NET上仅反映派生类的子属性

发布时间:2020-12-17 07:15:21 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Reflection序列化从另一个继承的类的属性,但我想仅序列化子类的属性,而不是父类的属性.我怎样才能做到这一点? 这就是我正在做的事情,不幸的是它正在获得父类的所有属性,正如人们所期望的那样: Public Function SaveData() As System.Collect
我正在尝试使用Reflection序列化从另一个继承的类的属性,但我想仅序列化子类的属性,而不是父类的属性.我怎样才能做到这一点?

这就是我正在做的事情,不幸的是它正在获得父类的所有属性,正如人们所期望的那样:

Public Function SaveData() As System.Collections.Generic.List(Of System.Xml.Linq.XElement) Implements Interfaces.ICustomXMLSerialization.SaveData

        Dim elements As New List(Of System.Xml.Linq.XElement)
        Dim ci As CultureInfo = CultureInfo.InvariantCulture

        With elements

            Dim props As PropertyInfo() = Me.GetType.GetProperties()
            For Each prop As PropertyInfo In props
                If TypeOf Me.GetType.GetProperty(prop.Name).PropertyType Is IList Then
                    .Add(New XElement(prop.Name,DWSIM.App.ArrayToString(Me.GetType.GetProperty(prop.Name).GetValue(Me,Nothing),ci)))
                ElseIf TypeOf Me.GetType.GetProperty(prop.Name).GetValue(Me,Nothing) Is Double Then
                    .Add(New XElement(prop.Name,Double.Parse(Me.GetType.GetProperty(prop.Name).GetValue(Me,Nothing)).ToString(ci)))
                Else
                    .Add(New XElement(prop.Name,Me.GetType.GetProperty(prop.Name).GetValue(Me,Nothing)))
                End If
            Next

        End With

        Return elements

    End Function

提前致谢,
丹尼尔

解决方法

您需要将BindingFlags.DeclaredOnly指定为GetProperties调用的参数.

但是,经常会遇到使用这些标志的问题,因此可能需要进行一些实验才能找到所需标记的确切组合.枚举的MSDN描述是here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读