2009-01-08 42 views
0

我试图找到最有效的方式将我的Linq2Sql对象通过JSON发送到我的jQuery插件,最好不需要每个类的附加代码。创建轻量级的Linq2Sql代理对象

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

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

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

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

我目前最喜欢的解决方案,我喜欢和讨厌在同一时间是把类放入选择序列化模式,但因为我不能添加属性的真实属性,我必须创建仅JSON部分类中的属性。再次,这似乎是浪费,但我认为这是迄今为止最好的。

任何建议感激地收到!

回答

0

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

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

希望这会有所帮助!