我正在尝试创建一种传输机制,我可以使用一个Class对象并将其转换为webservice对象,只需要很少的代码。
我使用这种方法取得了相当不错的成功,但是当我将自定义类作为源对象的属性返回时,我需要优化技术。
Private Sub Transfer(ByVal src As Object, ByVal dst As Object)
Dim theSourceProperties() As Reflection.PropertyInfo
theSourceProperties = src.GetType.GetProperties(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
For Each s As Reflection.PropertyInfo In theSourceProperties
If s.CanRead AndAlso (Not s.PropertyType.IsGenericType) Then
Dim d As Reflection.PropertyInfo
d = dst.GetType.GetProperty(s.Name, Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
If d IsNot Nothing AndAlso d.CanWrite Then
d.SetValue(dst, s.GetValue(src, Nothing), Nothing)
End If
End If
Next
End Sub
我需要的是确定源属性是否为基本类型(字符串,int16,int32等,而不是复杂类型)。
我正在查看s.PropertyType.Attributes并检查其上的掩码,但我似乎无法找到任何表明它是基类型的东西。
我可以检查一下吗?
答案 0 :(得分:0)
感谢abmv的提示,这是我最终使用的最终结果。我仍然需要编写一些特定属性的代码,但大多数属性都是通过这种机制自动处理的。
Private Sub Transfer(ByVal src As Object, ByVal dst As Object)
Dim theSourceProperties() As Reflection.PropertyInfo
theSourceProperties = src.GetType.GetProperties(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
For Each s As Reflection.PropertyInfo In theSourceProperties
If s.CanRead AndAlso (Not s.PropertyType.IsGenericType) And (s.PropertyType.IsPrimitive Or s.PropertyType.UnderlyingSystemType Is GetType(String)) Then
Dim d As Reflection.PropertyInfo
d = dst.GetType.GetProperty(s.Name, Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
If d IsNot Nothing AndAlso d.CanWrite Then
d.SetValue(dst, s.GetValue(src, Nothing), Nothing)
End If
End If
Next
End Sub