创建轻量级Linq2Sql代理对象

时间:2009-01-08 11:47:16

标签: linq-to-sql json serialization json.net

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

EntitySet是主要问题,因为它们不仅导致递归,而且当忽略递归时(使用JSON.NET的ReferenceLoopHandling功能),当我只需要1或2时,可以检索到大量的数据水平。当你在谈论用户,角色和权限时,当你获得递归和停止之前获得用户的角色,用户的权限,角色的权限和角色的用户时,这会非常糟糕。将此与我实际想要的相比,这只是RoleId。

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

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

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

我当前最喜欢和讨厌的解决方案是将类放入opt-in序列化模式,但因为我无法向真实属性添加属性,所以我必须创建仅限JSON的属性在部分班级。再次,这似乎是浪费,但我认为这是迄今为止最好的。

感激不尽的任何建议!

1 个答案:

答案 0 :(得分:0)

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

它是代码生成下的标准属性,当您将其设置为Unidirectional时,它不会生成表结构的所有其他级别。我已经将它用于silverlight和WCF发送数据,因为数据合同不允许发送额外的级别(Silverlight在你能做什么和不能做的事情上非常有限)。

希望这有帮助!