保持JavaScript和C#对象模型之间的一致性

我正在开发一个ASP.NET Web应用程序,它在客户端使用大量JavaScript,允许用户执行拖放列表重新排序,查找要添加到列表中的项目(如谷歌搜索栏),删除列表中的项目等。

我有一个JavaScript“类”,用于存储客户端的每个列表项以及用户对项目执行的操作(添加,编辑,删除,移动)的信息。 页面发布到服务器的唯一时间是用户完成时,在页面提交之前,我将有关所做更改的所有信息序列化为JSON并将其存储在页面的隐藏字段中。

我正在寻找的是关于如何在C#中构建我的类的一般建议。 我认为在C#中有一个与JavaScript匹配的类可能会很好,所以我可以将JSON实现到这个类的实例。 虽然在服务器端有类直接复制JavaScript类,但只存在支持JavaScript UI实现,这似乎有点奇怪。

这是一个抽象的问题。 我只是在维护匹配客户端和服务器端对象模型方面做过类似事情的其他人寻求一些指导。

有一个完美的感觉。 如果我遇到这个问题,我会考虑使用数据类型或类的单一权威描述,然后从该描述生成代码。

描述可能是一个javascript源文件; 你可以构建一个解析器,从该JS生成适当的C#代码。 或者,它可能是一个C#源文件,您可以进行相反的操作。

您可能会在RelaxNG中找到更多实用程序,然后为C#和Javascript构建(或查找)生成器。 在这种情况下,RelaxNG模式将被检入源代码控制,而生成的工件则不会。


编辑 :还有一个名为WADL的新生规范,我认为在这方面也会有所帮助。 我没有评估过WADL。 在外围,我知道它并没有风靡世界,但我不知道为什么会这样。 对此有一个问题 。


编辑2:由于缺乏工具(WADL显然是死产),如果我是你,我可能会尝试这种战术方法:

  • 使用c#类型的[DataContract]属性并将其视为确定性。
  • 通过在示例XML JSON文档上使用JsonSerializer,构建一个在C#类型中徘徊的工具,从编译的程序集中实例化并实例化类型,该文档提供了一种事实上的“对象模型定义”。 该工具应该以某种方式validation实例化类型可以往返等效的JSON,可能在结果的东西上使用校验和或CRC。
  • 在构建过程中运行该工具。

要实现这一点,您必须将“示例JSON文档”签入到源代码中,并且还必须确保是您在应用程序中的各种JS代码中使用的表单。 由于Javascript是动态的,您可能还需要一个类型validation程序或其他东西,它将作为jslint或其他构建时validation步骤的一部分运行,它将检查您的Javascript源以查看它是否正在使用您的“标准”objbect模型定义。