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

标签 c# javascript schema schema-design relaxng

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

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

我正在寻找有关如何在 C# 中构建类的一般性建议。我认为在 C# 中有一个与 JavaScript 类匹配的类可能会很好,这样我就可以将 JSON 反序列化为此类的实例。虽然服务器端的类既直接复制 JavaScript 类,又只支持 JavaScript UI 实现,这似乎有点奇怪。

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

最佳答案

很有道理。如果我遇到这个问题,我会考虑使用数据类型或类的单一明确描述,然后根据该描述生成代码。

描述可能是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 文档” checkin 源代码,并且还必须确保 是您在各种应用程序中使用的表单应用程序中的 JS 代码。由于 Javascript 是动态的,您可能还需要一个类型验证器或其他东西,它将作为 jslint 或其他构建时验证步骤的一部分运行,这将检查您的 Javascript 源代码以查看它是否正在使用您的“标准”对象模型定义.

关于c# - 保持 JavaScript 和 C# 对象模型之间的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2112958/

相关文章:

c# - 在不使用私有(private)成员的情况下保持 System.Threading.Timer 处于事件状态

c# - 参数 IEnumerable<T> c#

javascript - 写入 iframe 会导致浏览器使用不同的 url 重新加载

sql - SQL中如何根据多个 'tags'查询数据?

database-design - 你知道任何支持嵌入式文档(MongoDB)的数据库设计软件吗?

c# - 从 DataTable 创建 Excel 数据透视表

c# - 如何获取指向托管类的原始内存指针?

javascript - 滚动到下一个元素

javascript - 在 HTML canvas 上一条接一条地绘制连续的线条

html - 用于多个可见 HTML 元素的 Aria 两种方式标签