在 JMS 序列化器中排除 null 属性

2024-03-25

我使用的 XML API 可以选择仅检索部分响应。 这导致生成的对象有很多NULL属性(如果使用此功能)。 有没有办法真正跳过NULL特性?我尝试实施排除策略

shouldSkipProperty(PropertyMetadata $property, Context $context)`

但我意识到无法访问当前的属性值。

一个例子是下面的类

class Hotel {
    /**
     * @Type("string")
     */
    public $id;

    /**
     * @Type("integer")
     */
    public $bookable;

    /**
     * @Type("string")
     */
    public $name;

    /**
     * @Type("integer")
     */
    public $type;

    /**
     * @Type("double")
     */
    public $stars;

    /**
     * @Type("MssPhp\Schema\Response\Address")
     */
    public $address;

    /**
     * @Type("integer")
     */
    public $themes;

    /**
     * @Type("integer")
     */
    public $features;

    /**
     * @Type("MssPhp\Schema\Response\Location")
     */
    public $location;

    /**
     * @Type("MssPhp\Schema\Response\Pos")
     */
    public $pos;

    /**
     * @Type("integer")
     */
    public $price_engine;

    /**
     * @Type("string")
     */
    public $language;

    /**
     * @Type("integer")
     */
    public $price_from;
}

在这个特定的 api 调用中反序列化到以下对象,其中包含很多内容null特性。

"hotel": [
    {
        "id": "11230",
        "bookable": 1,
        "name": "Hotel Test",
        "type": 1,
        "stars": 3,
        "address": null,
        "themes": null,
        "features": null,
        "location": null,
        "pos": null,
        "price_engine": 0,
        "language": "de",
        "price_from": 56
    }
]

但我希望它是

"hotel": [
    {
        "id": "11230",
        "bookable": 1,
        "name": "Hotel Test",
        "type": 1,
        "stars": 3,
        "price_engine": 0,
        "language": "de",
        "price_from": 56
    }
]

您可以配置 JMS Serializer 来跳过null像这样的属性:

$serializer = JMS\SerializerBuilder::create();              
$serializedString = $serializer->serialize(
    $data,
    'xml',
    JMS\SerializationContext::create()->setSerializeNull(true)
);

取自这个问题 https://github.com/schmittjoh/JMSSerializerBundle/issues/293#issuecomment-51306421.

UPDATE:

不幸的是,如果您在反序列化时不想要空属性,除了自己删除它们之外没有其他方法。

但是,我不确定您实际想要删除这些属性的用例是什么,但它看起来并不像Hotel类包含很多逻辑。在这种情况下,我想知道结果是否应该是一个类?

我认为将数据表示为关联数组而不是对象会更自然。当然,JMS Serializer 无法将您的数据反序列化为数组,因此您将需要一个数据传输对象。

你添加就足够了dumpArray and loadArray方法到你现有的Hotel班级。这些将用于将数据转换为您想要的结果,反之亦然。这就是你的 DTO。

/**
 * Sets the object's properties based on the passed array
 */
public function loadArray(array $data)
{
}

/**
 * Returns an associative array based on the objects properties
 */
public function dumpArray()
{
    // filter out the properties that are empty here
}

我相信这是最干净的方法,它可能反映了您想要做的更多事情。

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JMS 序列化器中排除 null 属性 的相关文章

  • 将 XML 数据提取到 php [重复]

    这个问题在这里已经有答案了 我正在尝试从 XML 文件中提取数据 http freegeoip net xml google com http freegeoip net xml google com 您可以看到该文件的内容类似于
  • 如何使用图像生成 SVG 二维码?

    我有一个用于生成 jpeg 和 png 格式的 qrcode 的代码 但也想在 PHP 中生成带有背景图像的 svg qrcode 我正在使用 qrlib php 生成 jpeg 和 png 格式 QRlib php 也支持 SVG 不是吗
  • Laravel:运行队列:在 Windows Azure Web App 上连续监听

    我觉得问这个问题有点傻 但我似乎无法在互联网上找到这个问题的答案 经过几个小时的搜索后 我发现在 Linux 服务器上 您使用 Supervisor 在您的网站上连续运行 php artisanqueue listen 无论有或没有守护进程
  • 上传非常大的文件(>5GB)

    我需要你的帮助 我想用 HTML JQuery 和 PHP 创建一个上传脚本 是否可以编写一个可以上传非常大的文件 gt 5 GB 的脚本 我已经尝试使用 FileReader FormData 和 Blobs 但即使使用这些 我也无法上传
  • 如何在 Yii 中设置 returnUrl 值

    我正在使用 Yii 我遇到的问题是Yii app gt user gt returnUrl 它总是让我回到index php page 由于我不知道用户从哪个页面访问了当前页面 如何将其值设置为请求当前页面的页面 您可以使用Yii app
  • 如何在MySQL选择查询中编写正则表达式?

    我尝试过这个表达 b word w b i比较一个word对照其他单词列表来查找重复项 我用了preg math all 效果很好 我想做同样的事情 但这次检查从 mysql 数据库检索到的单词 这是我写的 SELECT FROM tabl
  • 如何在Wamp服务器中启用SSL?

    我尝试在网上搜索它 但我很困惑 我没有得到任何澄清 逐步教程 http blog facilelogin com 2008 07 enabling ssl on wamp html 从链接复制 在 WAMP 上启用 SSL 本分步指南介绍了
  • PHP 中两个关联多维数组的值求和

    我正在尝试对两个关联数组的值求和 这是第一个数组 Array Jan 01 2013 gt Array COM gt 100 RES gt 200 Oct 28 2014 gt Array COM gt 300 RES gt 400 这是第
  • PDO dblib 未捕获警告

    我已经使用 realestateconz mssql bundle 和免费 TDS 成功使我的 symfony 应用程序连接到 MSSQL 数据库 我的问题是 当我尝试执行存储过程时 如果出现问题 该过程会引发异常 但 PDO 不会报告任何
  • 在另一个 Intent 中发送 Intent

    也许我的处理方式是错误的 但我想在我自己的应用程序中响应我的 Android AppWidget 的点击事件并启动一个 Activity 当时我设置了PendingIntent我还有一个Intent我想在点击时启动它 我的onStartCo
  • 从本地 html/javascript 网站插入 mySQL 数据库

    我正在尝试做什么 我的程序的目的是插入数据local HTML JS网站变成online 非本地 mySQL数据库 到目前为止我尝试过的 我试图用来实现此目的的原始方法是让我的本地网站使用 javascript 通过在线发布数据PHP文件
  • PHP date_sun_info 错误时间

    我正在尝试使用 PHPdate sun info函数获取全天太阳某些位置的时间信息 目前我正在使用类似于中的代码文档 http php net manual en function date sun info php sun info da
  • 为什么 http://localhost/ 不使用 WAMP 加载任何内容?

    我最近尝试安装 WAMP 但发现没有页面加载 它还有一个橙色的 W 标志 如果这有什么意义的话 它确实说 托盘图标 WAMP服务器已上线尽管 我也做了一些研究 发现 Skype 可能会引起问题 所以我删除了使用端口 80 和 443 作为传
  • CMS:将自定义页面存储为文件或 MySQL 数据库中?

    我正在 PHP 中创建一个自定义 CMS 从头开始编写 并且想知道是否应该将用户创建的页面存储为文件或存储在 MySQL 数据库中 内容全部是 HTML 代码 至少目前是这样 我无法决定该做什么 因为用 php 编写文件似乎存在安全风险 并
  • 从字符串中删除第一个和最后一个字符

    我有这个 dataList one two three list explode dataList echo pre print r list echo pre 其输出 gt Array gt 0 gt gt 1 gt one gt 2 g
  • 如何在 php 中为每个其他函数调用自动调用函数

    Class test function test1 echo inside test1 function test2 echo test2 function test3 echo test3 obj new test obj gt test
  • 重定向到另一个文件夹

    我读了这个 htaccess 重写以将根 URL 重定向到子目录 https stackoverflow com questions 990392 htacces rewrite to redirect root url to subdir
  • 向 yahoo 和 hotmail 用户发送电子邮件?

    我正在使用 php 和 mysql 每次用户在我的网站上注册时 我都会使用 php mail 发送一封电子邮件进行身份验证 最近我发现 很多Yahoo和Hotmail用户还没有激活他们的帐户 假设 1000 个用户中 只有 200 个被激活
  • 如何在刀片模板中通过引用 @include 来传递变量?

    在 Laravel 4 2 设置中 我在模板中有一个变量 我希望在多个包含之间共享该变量 主刀 This is the variable include header lt in header blade I often use tabin
  • Laravel 更新雄辩事件:获取数据

    我一直在读有关雄辩事件的文章 与模型的每次交互都有一个事件 创建 创建 更新 更新 保存 保存 删除 删除 恢复 恢复 我想知道模型更新后的数据以及之前的数据 是否可以 因为文档没有太多关于如何使用这些事件的信息 您正在寻找getDirty

随机推荐

  • iOS 13 UIView 截图无法正常使用。 iOS 12 运行良好

    我在截取包含显示其中视频流的子视图的主 UIView 时遇到问题 当我截取屏幕截图时 图像是正确的 减去带有黑色视频流的矩形 流图像未显示 截图有问题截图图像不好 https i stack imgur com Cxj3K jpg 和正确的
  • 从资源加载时在 DataGridView 中显示红色“X”的图像

    我正在尝试将我的项目资源中的图像列添加到新创建的 DataGridView 这是代码 DataGridViewImageColumn myImage new DataGridViewImageColumn myImage Image Pro
  • Code First 实体框架多对多关系

    谁能指出我哪里错了 我创建了两个简单的类 具有多对多的关系 工作正常 所有表都已正确填充 除了当我尝试检索任何学生课程时 什么都没有返回 public partial class Student public Student Courses
  • 如何使用 DataBinding Framework MVVM 在 EditText 上设置错误

    我正在使用 Android 数据绑定框架 我假设有一个用于登录表单的 EditText 用户名如下
  • 如何在 popper-js 中显示箭头

    我正在尝试使用popper js https popper js org index html 但我很难阅读文档并让事情正常运行 我似乎无法理解arrow显示 指向引用元素的三角形 下面的代码缩小了我想要做的事情 弹出器显示并定位在内容加载
  • csv 模块返回第一列的 BOM

    我有一个 csv 文件 格式如下 type type mapping style style mapping Count Residential Residential Antique Antique 109 Antique Residen
  • Azure Key Vault - 编程创建

    如何在 NET Core 应用程序中使用 C 以编程方式创建 Azure KeyVault 我看过之后写入和读取密钥库的示例 它是配置的 但不是在创建 kv 本身时进行的 使用方法VaultsOperationsExtensions Cre
  • 滚动顶部动画后滚动/滚动条锁定

    我有一些链接到页面内特定部分 使用主题标签 的锚点 以及滚动到文档窗口顶部或底部的锚点 html body animate scrollTop document height 2000 但是 一旦动画和滚动到达目的地并完成 文档滚动和滚动条
  • 多选编辑表单选定值

    在 Laravel 4 中遇到一个问题时 在 联系人 模型编辑表单中 我可以获得所有字段的当前值 除了用于与另一个模型 公司 建立关系的多重选择的字段值 这是一种多对多的关系 我正在获取公司列表 但即使存在关系 也没有选择任何公司 这是我的
  • 如何解决WPF表单调整大小-控件滞后和黑色背景?

    我有一个非常简单的 WPF 窗口 其中唯一的东西是一个右对齐按钮 当我通过拖动左边界来调整窗口大小时 按钮会跳很多次 自己尝试一下 来回拖动左侧边界 此外 在调整大小期间 黑色背景会暂时暴露 In this https stackoverf
  • RSpec+Capybara 请求规范 w/JS 不起作用

    使用 Javascript 时我无法使请求规范正常工作 我的规格pass如果我在没有 Javascript 的情况下运行它们 页面构建为可以使用或不使用 JS 具体来说 当我进行如下断言时 规范会失败Post should have 1 r
  • 如何在pycharm中将部分文件(帅哥)提交到git

    我是 Eclipse PyDev EGit 的重度用户 希望切换到 PyCharm 在 Eclipse 中 我可以选择仅将文件的某些块 行添加到 git 索引 与使用相同git add p从航站楼 我发现通过 GUI 执行此操作更快 并且我
  • 如何将现有的嵌套存储库(已在子目录中签出)作为子模块添加到父 Git 存储库?

    如果我从工作 父 目录创建初始提交 但存在具有独立签出的 git 存储库的子目录 会发生什么情况 我只是做了git add 但这给我带来了一个奇怪的情况 即具有嵌套 Git 存储库的子目录未注册为父存储库的子模块 那么 在初始 git ad
  • 如何在R中生成偏态正态分布的随机数?

    我正在尝试生成 1000 组 130 个随机数 这些随机数符合以下数字的偏态正态分布 10 4 9 3 6 8 4 8 5 7 5 8 4 5 3 4 2 0 3 0 4 4 1 6 9 5 9 2 5 2 2 8 3 2 4 4 2 1
  • linux shell 终止信号 SIGKILL && KILL

    我刚刚写了一个shell脚本来控制模块的启动和停止 一切看起来都很正常 直到我发现停止命令导致了意想不到的结果 我使用命令kill s SIGKILL gpid杀死一组进程 我用 bin sh像这样运行命令 bin sh c kill s
  • 使用联合类型进行对象字面量分配时,打字稿类型丢失

    我预计以下代码会出现错误 但对于打字稿来说完全没问题 你能告诉我为什么吗 export interface Type1 command number export interface Type2 children string export
  • 使用 javascript 检查 url 内容类型

    为了节省服务器资源 我正在寻找一种使用 javascript 检索给定 url 的内容类型的方法 它不应仅从标题下载 URL 的完整内容 javascript 有限制吗 使用 head 请求进行 Ajax 调用 var url window
  • 为什么 Blazor 应用在​​任何页面重新加载时都会显示错误

    我正在使用 Blazor 技术开展项目 我有时需要使用一些 JS 代码 并且需要在每个页面中包含不同的 js 文件 据我所知 唯一的方法是使用 JS 函数和 Blazor JS 调用添加它 所以我所做的是 在 Host razor 中 fu
  • web.config 位置中的 IIS 动态 IP 限制

    我正在尝试使用IIS 动态 IP 限制 https www iis net downloads microsoft dynamic ip restrictions限制来自同一 IP 的请求 我已经运行了该模块 并且如果我从 IIS UI 编
  • 在 JMS 序列化器中排除 null 属性

    我使用的 XML API 可以选择仅检索部分响应 这导致生成的对象有很多NULL属性 如果使用此功能 有没有办法真正跳过NULL特性 我尝试实施排除策略 shouldSkipProperty PropertyMetadata propert