通过匿名类型的对象迭代以检索属性和值

时间:2017-05-25 22:18:06

标签: .net vb.net entity-framework reflection

使用Entity Framework(EF6)和VB.Net反射,这两点我现在都不是很熟悉。

以下是我尝试实现目标的简要示例:

Dim user as New user()
user.full_name = "John Smith"

Dim str As String = "The user's name is **full_name**."

'For each p As Property In user.Properties
'    str = str.Replace("**" + p.Name + "**", p.Value)
'Next
  

输出:用户的名字是John Smith。

然而,问题是object是匿名类型。我希望能够传入我的任何实体类并动态替换属性出现。

我已经尝试了很多并且在这里阅读了大量的问题,但我仍然遇到了麻烦 - 很明显,我不能正确理解反思爱好。

我将在下面提供我的代码,以及我引用的任何内容。如果有人能够把我推向正确的方向,我会感激不尽。感谢。

根据GSerg的评论更新:

Public Function MailMerge(htmlString As String, obj As Object) As String
    Dim keyNames As New List(Of String)

    Dim dictionaryData As New Dictionary(Of String, String)()
    For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
        If p.CanRead AndAlso p.GetIndexParameters().Length = 0 Then
            Dim columnName As String = p.Name

            'FAILS HERE - p.Name is "Item" at the failing iteration
            Dim columnValue = p.GetValue(obj, Nothing)

            dictionaryData.Add(columnName, columnValue)
        End If
    Next

    For Each key In dictionaryData.Keys
        htmlString = htmlString.Replace("**" + key + "**", dictionaryData(key))
    Next

    Return htmlString

End Function

我只获得CapacityCount作为属性,但是如果给出user类型的对象(来自上方),我希望{ {1}}。

编辑:原来这个功能也需要处理列表,这显然是我上面提到的问题的根本原因。我要再调整一下,如果我无法弄清楚,我会更新我的问题。

参考文献:

0 个答案:

没有答案