0

我试图找到通过 JSON 将我的 Linq2Sql 对象发送到我的 jQuery 插件的最有效方法,最好不要为每个类添加额外的代码。

EntitySet 是主要问题,因为它们不仅会导致递归,而且当递归被忽略时(使用JSON.NET的 ReferenceLoopHandling 功能),当我真正需要 1 或 2 个级别时,可以检索大量数据。当您谈论用户、角色和权限时,这会变得非常糟糕,因为您在 JSON 遇到递归和停止之前将用户角色、用户权限、角色权限和角色用户全部放在了 JSON 中。将此与我真正想要的进行比较,这只是 RoleId。

我最初的方法是发送对象的“简化”版本,我在其中反映实体并将任何 EntitySets 设置为 null,但当然在上面的示例中,Roles 被设置为 null,因此 RoleId 为 null。仅将第二级属性设置为空类型的作品,但仍然有太多的数据,因为当 JsonSerializer 进行反射时,没有被杀死的实体集(第一级)重新填充它们的关联表,我仍然得到所有那些 Permission 对象我只是不需要。

我绝对不想陷入为每个类创建一个轻量级版本并在它们上实现“From”和“To”样式的方法的情况,因为这是很多工作并且看起来很浪费。

另一种选择是在相关属性上放置一个 JsonIgnoreAttribute,但是每当需要重新生成类时,这将导致噩梦般的场景。

我目前喜欢和讨厌的最喜欢的解决方案是将类置于选择加入序列化模式,但是因为我无法向真实属性添加属性,所以我必须在部分中创建仅限 JSON 的属性班级。同样,这似乎很浪费,但我认为这是迄今为止最好的。

任何建议都感激不尽!

4

1 回答 1

0

您是否尝试在 dbml 文件中设置序列化模式?

它是代码生成下的标准属性,当您将其设置为单向时,它不会生成表结构的所有其他级别。我已经将它与 silverlight 和 WCF 一起使用来发送数据,因为数据协定不允许发送额外的级别(silverlight 非常有限地限制了你能做什么和不能做什么)。

希望这可以帮助!

于 2009-01-08T21:30:27.027 回答