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

时间:2010-01-21 21:14:03

标签: c# javascript schema schema-design relaxng

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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


编辑:还有一个名为WADL的新生规范,我认为这也有助于此。我还没有评估过WADL。在周边,我知道它并没有风靡世界,但我不知道为什么会这样。 There's a question on SO regarding that


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

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

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