由于Object Initializers与JSON非常相似,现在.NET中有匿名类型.能够获取字符串(例如JSON)并创建表示JSON字符串的匿名对象会很酷.
使用对象初始值设定项创建匿名类型:
var person = new { FirstName = "Chris", LastName = "Johnson" };
如果您可以传入Object Initializer代码的字符串表示(最好是类似JSON)来创建具有该数据的匿名类型的实例,那将是非常棒的.
我不知道是否可能,因为C#不是动态的,并且编译器实际上将对象初始化器和匿名类型转换为可以运行的强类型代码.本文将对此进行说明.
也许使用JSON并使用它创建键/值Dictionary的功能最有效.
我知道你可以在.NET中将一个对象序列化/反序列化为JSON,但我想要的是一种创建一个基本上松散类型的对象的方法,类似于JavaScript的工作方式.
有谁知道在.NET中这样做的最佳解决方案?
更新:太清楚我为什么要问这个问题的背景......我在考虑C#如何在语言层面(可能)更好地支持JSON,并且我试图想出今天可以做到的方式,从概念上讲原因.所以,我想我会把它发布在这里开始讨论.
有一些.NET语言可以使用,但是使用Dot.Notation C#是不可能的,因为C#要求在编译时解析所有成员引用.如果要使用Dot.Notation,则仍需要在某处定义具有所需属性的类,并使用您希望从JSON数据实例化该类的任何方法.预先定义一个类确实有很多好处,比如强类型,IDE支持包括intellisense,并且不用担心拼写错误.您仍然可以使用匿名类型:
T deserialize(string jsonStr, T obj) { /* ... */} var jsonString = "{FirstName='Chris', LastName='Johnson, Other='unused'}"; var person = deserialize(jsonString, new {FirstName="",LastName=""}); var x = person.FirstName; //strongly-typed
你应该看看JSON.net项目:
http://james.newtonking.com/pages/json-net.aspx
您基本上是在谈论从JSON中对对象进行水合的能力.它不会做匿名类型,但也许它会让你足够接近.