在C#中从字符串创建动态类型

3
我的问题非常简单,与C#有关:
我们可以使用以下语法创建动态类型:
dynamic dObj = new { P1 = "a", P2 = 1, p3 = DateTime.Now };

为了获得相同的结果,是否有任何方法可以通过字符串变量创建该对象?例如:
string sObj = @"new { P1 = "a", P2 = 1, p3 = DateTime.Now }";
dynamic dObj = [something].fromstring(sObj);

我的想法是从由字符串构建的对象中获取一个对象,还是我需要一个序列化程序来实现这一点?


2
那实际上是创建一个静态类型、编译时安全的匿名类型对象,它在编译时也是动态的。这与想象中的任何东西都不一样。 - asawyer
好的,但是不使用序列化器,这个能做到吗? - Flavio CF Oliveira
1
你实际上是想要实现什么,才会找到这个答案的呢?可能有更好的方法... - asawyer
由于字符串中的数据实际上是通过持久化形式“序列化”的,所以答案是否定的;你需要某种反序列化器。不过它不一定要内置在程序中,你可以自己编写代码来解析这个匿名声明。 - KeithS
@KeithS 继承的 expando 可能非常适合。 - asawyer
显示剩余2条评论
1个回答

2

这需要使用编译器。ExpandoObject类基本上可以做到你想要的:

    dynamic bag = new ExpandoObject();
    bag.P1 = "a";
    bag.P2 = 1;
    bag.p3 = DateTime.Now;

这也解决了您原始代码中的一个问题,匿名类型的成员只有内部访问权限。换句话说,您的 dObj 对象只能在同一程序集中的代码中使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接