从string构造匿名对象,并使用反射枚举它的属性

时间:2014-07-15 11:16:37

标签: c# .net dynamic reflection anonymous-types

所以基本上我有这个字符串看起来像查询字符串"key1=value1&key2=value2"(或者JSON我还没有决定它。所以基本上我想把这个字符串转换成一个对象,然后用反射来枚举它的属性(或字段)。我已经看到了一些名为ExpandoObject的内容,但在我的情况下,它不会有帮助,因为我无法枚举它的属性,而且我的意思是我的属性,例如{{1} }和.Key1(来自上面的字符串)有反射(或者可能是有可能的,我做错了)。无论如何,任何帮助和建议将不胜感激。

修改

我想要实现的是这个。我有一个对象,而不是我需要在db中存储该对象的一些对象,作为上面给出的示例字符串,之后我需要从该字符串再次重新创建该对象。 (只是为了拥有与我保存的对象相同的字段属性)

所以我有这个方法可以直接或间接调用。如果我直接调用它,我可以创建传递给此方法的对象(.Key2)设置它的属性,然后将其传递给方法,如果间接调用,我将其他对象传递给另一个调用最终方法的方法。到第一个方法我传递一些其他对象,再加上一个anonymus对象,然后将属性与SomeParamsObject合并(通过传递给它的其他一些对象在第一个方法内创建)并传递给最终方法。我还需要将这个anonymus对象存储在DB中的某个位置,因为调用可能会从代码的其他模块重复,这就是我需要重构它的原因,要将所有这些更改为某个SomeParamsObject集合,它可能需要4-5天,因为这个方法实际上是从我的代码模块中调用的。

2 个答案:

答案 0 :(得分:1)

您不能使用字典或NameValueCollection吗?

var values = new NameValueCollection();
var pairs = "key1=value1&key2=value2".Split('&');
foreach(var kvp in pairs)
{
    var parts = kvp.Split('=');
    values.Add(parts[0], parts[1]);
}

然后您可以使用键访问您的值:

var value1 = values["key1"];

答案 1 :(得分:1)

使用HttpUtility.ParseQueryString方法从查询字符串中创建NameValueCollection

var collection = HttpUtility.ParseQueryString("key1=value1&key2=value2");
foreach (string key in collection)
{
    string value = collection.Get(key);
    //Do whatever with key and value
}