为什么在反序列化Ruby对象时会出错?

时间:2013-08-14 21:09:02

标签: ruby object serialization

我有一个Ruby端映射对象在一端序列化并在另一端接收。当在目标处收到时,我需要将其评估回​​原始的相同地图对象并进行一些处理。

但是,目标的评估失败,出现“语法错误,意外的$ end”消息。

失败,因为:application符号引用UploadIO对象。

鉴于我只能更改接收序列化对象的目标上的代码,解决问题的最佳方法是什么?将:application的值转换为字符串或使用其他技巧?

eval ('
 {"component"=>"CF", 
  "body"=>
    ["PUT", 
     "v2/apps/269e739c-5d08-429c-8682-d3200b79283b/bits", 
     {:payload=>
       {
       :resources=>"[]", 
       :application=>#<UploadIO:0x000000022af330 @content_type="application/zip">
       }
     }
    ]
 }')

1 个答案:

答案 0 :(得分:2)

您无法合理地对字符串执行eval,因为#正在作为注释字符处理。最直接的方法是继续将字符串中#<...>的出现次数替换为在进行评估之前所需的任何内容。