【问题标题】:Creating lightweight Linq2Sql proxy objects创建轻量级 Linq2Sql 代理对象
【发布时间】:2009-01-08 11:47:15
【问题描述】:

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

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

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

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

另一种选择是在相关属性上放置一个 JsonIgnoreAttribute,但这会在需要重新生成类时引发噩梦。

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

任何建议都非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多