通用 C# JSON 生成器,用于将任何数据发送到 JavaScript






3.62/5 (10投票s)
通用 C# JSON 生成器,
引言
您希望如何在 C# 中拥有任何数据(例如这个 3.5 示例)……

...并从 JavaScript 访问它,使用与 C# 相同的语法

“他们是怎么做到的?”
当时我正在使用 ASP.NET 构建一个简单的 Ajax 应用程序,并且很难将数据从 ASP.NET 的代码隐藏发送到 JavaScript 代码。然后我发现了 JSON,它解决了所有问题。 JSON 的好处在于它是一种浏览器可以理解的格式,并且可以用于在其 JavaScript 引擎中创建相当复杂的数据。所以我编写了一个基于递归反射的 JSON 生成器,它接受任何托管类或结构,并生成浏览器可以理解的 JSON 字符串。
因为此引擎在类中搜索字段,所以**无需编写此类属性**
public int Id
{
get { return this._id; }
set { this._id = value; }
}
您可以选择所有字段,也可以使用属性标记特定字段,然后仅将它们发送到 JavaScript 代码。
更重要的是,该引擎甚至可以处理 .NET 3.5 特有的匿名类型(如上图所示)。似乎匿名类型与程序集的 DLL 中的适当类型存储方式不同。
Using the Code
使用该代码非常简单:使用一行 C# 代码即可将对象“转换”为发送到客户端代码的 JSON 字符串。无需辅助类(如类型序列化程序)。
客户端代码使用一行 eval 代码来创建 DOM 对象。
就是这样。 在 .NET 3.5 中,您甚至不必编写带有复杂构造函数的类来接收所有数据作为参数(就像 .NET 2.0 中那样)。
该引擎可以处理原始数据类型(数值类型、字符串和日期)、类、结构、数组和空字段。 如果您的某些数据在自定义集合(如泛型列表)中,则可以使用ToArray()
方法以引擎可以理解的形式获取。 我选择使用 array
(s) 而不是 IEnumerable
(s),因为您可能有一个实现 IEnumerable
的类,但您可能不想将其视为集合(string
就是这样一个类)。
我知道此引擎的全部意义在于隐藏对象的表示,但这是一个它看起来如何的示例(只是为了有一个想法)。
{
'date' : new Date( 2008, 1, 23, 8, 5, 52 ) ,
'Name' : 'some string' ,
'StringSpecial' : '\\some \' \" string' ,
'NullString' : null ,
'Private' : null ,
'i' : -1 ,
'f' : 2.3 ,
't2' :
{
'd' : 3.14 ,
'D' : 3.15 ,
'ThisIsAStruct' :
{
'str' : 'string in a struct'
}
}
}
既然您已经了解了情况,请前往下载存档并试用。
有一个 Visual Studio 2005 和一个 Visual Studio 2008 解决方案。 最后一个包含一个 .NET 3.5 ASP 示例,用于测试我所吹嘘的匿名类型。
如果您查看生成器的代码,您会注意到它甚至没有 200 行代码长。
PS:不要忘记将 Web 项目设置为 Visual Studio 中的“启动项目”。
历史
- 2008 年 2 月 23 日 - 初始版本
- 2009 年 2 月 16 日 - 新代码版本