在不使用反射的情况下,将内部类型转换为c#中的通用名称/值对

时间:2013-02-28 09:13:47

标签: c# xml xml-serialization

我之前在此论坛上发布了一个问题 - '将内部类型转换为通用名称/值对列表'。我确实收到了一些很好的答案,这些答案指出了我使用反射的方向,我做了一个简短的概念证明,看起来很好。然而,就性能等问题而言,在反射的使用方面存在一些问题。我想知道有没有其他方法可以做到这一点?

请参阅以下要求的大纲:

我们只想获取一个内部类型,检查该字段是否存在于枚举或列表中,以及填充它是否将其移动到通用名称/值对列表中。这样我们就可以以一般/标准的方式发送大量信息,而不必担心如果添加新字段则更改模式等。我的问题是如何填充通用结构。

[Serializable]
public class Location
    {   
          public string sAddress { get; set; }
          public string sCity { get; set; }
          public int iZipCode { get; set; }
    }

需要转变为:

<AttributeList>
  <Attribute>
    <Name>sAddress</Name>
    <Value>123 ABC Street</Value>
    <DataType>string</DataType>
  </Attribute>
</AttributeList>

重复sCity和iZipCode。我能想到的唯一方法(不使用反射)是手动编写内部结构上的每个字段 - 对我来说似乎非常无效

任何想法都会受到赞赏!!

1 个答案:

答案 0 :(得分:3)

反思不一定非常低效。如果您知道要反复执行基本相同的代码,则可以从基于反射的成员创建委托。那些将更快地执行更多。有关各种选项,请参阅Delegate.CreateDelegate(记住属性基本上只是一个get / set方法对)。

如果您使用的是.NET 3.5,则可以使用表达式树作为构建委托的一种轻微替代方法。

一旦你获得了基于代表的表单,性能应该是非常合理的。