作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如何在 Psych 中反序列化以返回现有对象,例如类对象?
要做一个类的序列化,我可以做
require "psych"
class Class
yaml_tag 'class'
def encode_with coder
coder.represent_scalar 'class', name
end
end
yaml_string = Psych.dump(String) # => "--- !<class> String\n...\n"
Psych.load
在那,我得到了一个匿名类,而不是 String 类。
Object#init_with(coder)
,但这只会改变现有匿名类的状态,而我想要 String 类。
Psych::Visitors::ToRuby#visit_Psych_Nodes_Scalar(o)
有这样的情况,而不是使用
init_with
修改现有对象,他们确保首先创建正确的对象(例如,调用
Complex(o.value)
来反序列化一个复数),但我认为我不应该对那个方法进行猴子补丁。
receiver.send(method_name, *parameters, &block)
receiver
是一个随机选择的对象,而
method_name
是个
*parameters
是一个数组
&block
不是很随机 - 基本上是
{|o| o.inspect}
.
"a".send(:casecmp, "b") {|x| x.inspect}
"a".casecmp("b")
Thread.kill(nil)
ObjectSpace.undefine_finalizer(:symbol)
Symbol.all_symbols.inspect
最佳答案
我目前的研究现状:
为了让您想要的行为正常工作,您可以使用我上面提到的解决方法。
这是格式良好的代码示例:
string_yaml = Psych.dump(Marshal.dump(String))
# => "--- ! \"\\x04\\bc\\vString\"\n"
string_class = Marshal.load(Psych.load(string_yaml))
# => String
gem 'psych'; require 'psych'
并检查
Psych::VERSION
)
"--- !ruby/class String"
关于ruby - 如何在 Psych 中反序列化类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774580/
我是一名优秀的程序员,十分优秀!