2010-10-21 56 views
2

我想在运行时在C#中创建自定义对象,这些对象将具有从xml文件导入的属性。 xml文件看起来是这样的:在运行时在C#中创建自定义对象

<field name="FirstName" value="Joe" type="string" /> 
<field name="DateAdded" value="20090101" type="date" /> 

我想创建在C#中有诸如姓和DateAdded和具有正确类型的属性属性的对象。我怎样才能做到这一点?我已经尝试使用if语句的函数来确定基于“type”属性的类型,但我想在动态评估类型。

谢谢。

+0

为什么你需要一个对象?你不能只使用XML?一本字典? – 2010-10-21 02:21:00

+0

您必须告诉我们您正在使用的C#版本。 – 2010-10-21 02:27:04

+0

@Esteban,我需要这个对象,因为它允许我使用这些类型将其转换为不同的格式以便导出。 @Danny,我正在使用Visual Studio 2010. – jangeador 2010-10-21 05:35:33

回答

4

您可以通过CodeDOM或更容易地使用dynamicExpandoObject来完成此操作。

但是,要意识到,事先不知道类型,很难有效地使用它们。通常,制作Dictionary<TKey, TValue>或类似的选项是一个更容易的选择。

+0

谢谢,我不知道ExpandoObject。 – jangeador 2010-10-21 16:12:00

1

对不起,我的C#的生锈,所以我在VB解决这个问题。唯一的办法就是使用Object类型。退房的属性类型定义,下面实例方法:

Private m_myVal As Object 
Public Property myVal() As Object 
    Get 
     Return m_myVal 
    End Get 
    Set(ByVal value As Object) 
     m_myVal = value 
    End Set 
End Property 

Public Sub New(ByVal valType As String, ByVal val As Object) 
    If valType = "string" Then 
     myVal = CType(val, String) 
    ElseIf valType = "date" Then 
     myVal = CType(val, Date) 
    End If 
End Sub 

然后,例如,创建一个类的新实例为:

Dim myDynamicClass as New Class1("date","10/21/2010") 

你设为myVal属性将存储有一个日期类型值。

+0

谢谢,这与我现在拥有的非常相似。 – jangeador 2010-10-21 05:36:50

+0

然后你必须在正确的轨道= P祝你好运! – ewitkows 2010-10-21 14:58:14