JMS Serializer:如何限制对象图的序列化深度

2023-12-10

也许这只是我对此注释的误解,但它似乎没有按预期工作。

我有以下对象图

User
 -> Company
  -> Users
   -> Groups
    -> Permissions

正如你所看到的,会有一些递归。 JMS 很好地处理了这个问题,它不序列化其他用户的公司属性以及当前用户的属性。

不过,我希望连载停止并包括公司。

我已经尝试过了,期望一旦级别 $context->level = 2 它就会停止

<?php
namespace FinalConcept\TimeTracker\EntitiesBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;

/**
 * FinalConcept\TimeTracker\EntitiesBundle\Entity
 *
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="FinalConcept\TimeTracker\EntitiesBundle\Repository\UserRepository")
 */
class User implements UserInterface, \Serializable
{
     /**
     * @ORM\ManyToOne(targetEntity="company", inversedBy="users")
     * @ORM\JoinColumn(name="company_id", referencedColumnName="id")
     * @JMS\MaxDepth(depth=1)
     */
    private $company;
}

然而,这种情况并非如此。即使单步执行代码也没有说明如何阻止这种情况。

如果我只能为特定路径(即 User.Company)调用它,我很高兴创建一个自定义处理程序

我还需要这个用于 User.Groups ,它具有下图

User
 -> Groups
  -> Permissions
 -> Users
   -> Groups
     -> users ....

预先感谢您提供有关如何限制对象图序列化深度的任何帮助


因为我无法访问最新版本的序列化器,所以我必须找到 @MaxDepth 的解决方法。这也可能对你有帮助。

对连接的所有实体使用 @JMS\ExclusionPolicy("all")。

现在,仅对您想要序列化的属性使用 @JMS\Expose。 对于连接关系,仅在一个方向上使用此注释。这将解决你的问题。

namespace FinalConcept\TimeTracker\EntitiesBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;

/**
 * FinalConcept\TimeTracker\EntitiesBundle\Entity
 *
 * @JMS\ExclusionPolicy("all")
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="FinalConcept\TimeTracker\EntitiesBundle\Repository\UserRepository")
 */
class User implements UserInterface, \Serializable
{
     /**
     * @JMS\Expose
     * @ORM\ManyToOne(targetEntity="company", inversedBy="users")
     * @ORM\JoinColumn(name="company_id", referencedColumnName="id")
     */
    private $company;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JMS Serializer:如何限制对象图的序列化深度 的相关文章

随机推荐

  • 详细500错误信息,ASP+IIS 7.5

    IIS 7 5 2008rc2 经典 asp 500 错误消息 由于发生内部服务器错误 该页面无法显示 我需要知道如何配置 IIS 以获得更详细的错误 我尝试将 ASP 配置中的所有调试选项设置为 true 但这没有用 谁能帮我 我遇到了同
  • 更改第 2 列中的日期,其中数字与第 3 列不匹配

    我以前尝试过这个 但需要改变方向 我正在更改数字 但发现数字不同后我需要更改日期 我的文本有 3 列 第二列和第三列相似 但偶尔会有 1 4 位数字不匹配 我添加了一个示例 以便您可以看到我在说什么 我已经添加了 substr 命令 但那是
  • .htaccess 删除网址中的问号

    我有一个网站 其网址中有一个我想要重写的查询字符串 网址是domain com profile php user sven我希望它重定向到domain com profile user sven 我创建了一个 htaccess 文件 其规则
  • 除了 Simple Solver 之外,还有什么软件可以求解给定输入/输出的数字电路?

    All 我在这里找到了一个名为 简单求解器 的东西 http home roadrunner com ssolver syn html 你可以在这里下载 http www softpedia com progDownload Simple
  • 一个项目,多个客户。角2

    好吧 我有一个问题 但我似乎找不到答案 假设我有一个项目 x 它将由多个客户端使用 每个客户端都有自己的功能 可以共享或不共享 以及自己的自定义样式表和 html 布局 因此 按照正常的角度 2 单击模式 我想知道这是否可能 Example
  • 在 R v3.5.1 中,是什么导致打印列表的第一个元素用反引号括起来?

    最近我使用 RStudio v1 1 453 在 Windows 10 上将 R 更新到 3 5 1 我感兴趣的是为什么打印列表的第一个元素现在总是用反引号括起来 即使它是没有非法符号的标准名称 例如 a 如本例所示 R 3 5 1 lis
  • 在包含shared_ptr的地图上使用find_if会增加引用计数

    我正在创建一个程序 其中有一个包含shared ptr 的映射 当我尝试在其中找到一个元素时std find if shared ptr的引用计数增加 例子 include
  • IE 中的 jQuery .clone() .html() Bug

    jQuery 1 6 2 中似乎仍然存在一个错误 该错误与 clone 和 html 存在问题 我创建了一个小提琴 http jsfiddle net Vxyu3 12 这应该有助于解释该错误 如果您依次单击这两个链接 在 Firefox
  • Laravel:更新时验证唯一

    我知道这个问题之前已经被问过很多次了 但是没有人解释当你在模型中验证时如何获取 id email gt unique users email address 10 我的验证规则位于模型中 那么如何将记录的 ID 传递给验证规则 这是我的模型
  • Spotify 拼图问题

    我正在尝试解决本文中描述的 最佳之前 Spotify 难题page 基本上 输入三个由斜杠分隔的整数 例如 11 3 4 您应该生成一个具有 2011 03 04 格式的最早可能日期的输出 如果没有可能的日期 则应返回原始字符串 后跟 is
  • 使用哪种 MySQL 数据类型来存储布尔值

    由于MySQL似乎没有任何 布尔 数据类型 那么您 滥用 哪种数据类型来在MySQL中存储真 假信息 特别是在写入和读取 PHP 脚本的情况下 随着时间的推移 我使用并看到了几种方法 tinyint 包含值 0 1 的 varchar 字段
  • Crystal Reports 中的条件求和

    我有一些带有价格和数量的行 我只想对数量 gt 5 的价格求和 itemname price Qty apple 20 2 watermelon 10 3 bango 22 6 hashesh 3 9 根据以上数据 我想要得到的总和是 22
  • WPF 组合框“泄漏”内存

    我在 WPF 中遇到了组合框的问题 它们似乎挂在打开的第一个 DataContext 上 当我更改 ComboBox 上的 DataContext 时 子 PopupRoot 对象仍然引用旧的 DataContext 起初我以为我们做错了什
  • ContentTemplate 中绑定和 DataContext 的混淆

    考虑以下样式
  • Sass 循环遍历以数字开头的类名

    我正在循环遍历 sass 中的名称列表 当它到达类名以数字开头的点时 sass 似乎正在中断 事实上 当我注释掉以数值开头的类名时 sass 编译工作得很好 这就是说我无法重命名类名 我怎样才能让它发挥作用 下面是我尝试的代码 each c
  • 如何使用 OpenSSL 编译一个简单的程序?

    我正在尝试编译一个简单的 ssl 程序 它取自 openssl 书籍源代码 该程序有以下文件 common h common c client c server c 我已经安装了 openssl 0 9 7 所以我有与本书相同的版本 我已经
  • 在 wpf 和 gdi+ 之间转换图像时内存消耗过多

    我预计将 TransformedBitmap 转换为 System Drawing Bitmap 时会消耗太多内存 该图像相当大 具有 7360x4912 像素 采用 BGR32 像素格式 总计 144609280 位 138MB 最初 我
  • Google AdWords 转换服务问题 - 异步转换代码

    我从未在网站上实施过 Google Adwords 因此 如果我的 行话 有误 请随时纠正我 我正在开发一个网站 该网站有一个 Google AdWord 广告系列的登录页面 此页面上有一个表单 处理后会将您带到另一个页面并显示 感谢您的请
  • Web api 2 Web 服务中的 Dispose 方法

    我正在使用 Web api 2 Web 服务编写 MVC 5 互联网应用程序 我是否需要 Web 服务中的 DbContext 类的 dispose 方法 默认情况下它不存在 实际上 System Web Http ApiControlle
  • JMS Serializer:如何限制对象图的序列化深度

    也许这只是我对此注释的误解 但它似乎没有按预期工作 我有以下对象图 User gt Company gt Users gt Groups gt Permissions 正如你所看到的 会有一些递归 JMS 很好地处理了这个问题 它不序列化其