使用C#对象初始化程序语法我可以实例化一个匿名对象,如下所示:
object empData = new { name = "bob", age = 30, salary = 100000 };
Run Code Online (Sandbox Code Playgroud)
但是,如果我将初始值设定项存储在字符串中,例如:
string init = "{ name = \"bob\", age = 30, salary = 100000 }";
Run Code Online (Sandbox Code Playgroud)
什么是将此字符串转换为对象实例的最佳方法?
Col*_*ett 17
匿名类是C#语法糖(参见此处的备注部分).csc.exe创建一个具有私有字段和读/写属性的类,其类型从上下文推断出来.再次推断出对象的所有用途.
这意味着您无法在运行时创建匿名类,因为CLR看到它们与任何其他类没有什么不同(同样,因为它是C#语法糖).
所以与其:
Dictionary<string,object>System.Reflection.Emit在运行时创建类型,但我认为这不仅仅是一个真正的好处Dictionary<string,object>我也担心你正在做什么,因为这对于我来说很可能意味着你接受某种用户输入.无论你做什么,都要警惕安全问题.
使用匿名类型是不可能的,但是你可以使用TypeBuilder类,特别是TypeBuilder.Create(..)来使用Reflection Emit.
http://msdn.microsoft.com/en-us/library/system.reflection.emit.typebuilder.createtype.aspx
最好的方法是使用序列化。但是,当然,它不会使用您描述的相同字符串格式。
您的对象初始值设定项不必包含常量值。
string myName="bob";
int myAge=30;
double mySalary=100000;
object empData = new { name = myName, age = myAge, salary = mySalary };
Run Code Online (Sandbox Code Playgroud)
因此,在您的方案中,您将必须从字符串中解析出各个元素,并对它们执行一些转换,以将其强制转换为所需的类型。
如果您不喜欢这种特殊的字符串格式,则可以序列化和反序列化对象,并使用XML轻松完成相同的事情。
| 归档时间: |
|
| 查看次数: |
15223 次 |
| 最近记录: |