【发布时间】:2020-02-27 02:17:05
【问题描述】:
我在尝试反序列化结构时遇到了问题。
我尝试过使用 JSON 和 YAML,重写结构以使用切片而不是映射(认为这是我使用映射的问题),但都无济于事。
下面的结构包含问题,特别是反序列化函数。我用...替换了不相关的代码:
type Collection struct {
Objects []Object `yaml:"objects,omitempty"`
}
...
func (c *Collection) Serialize() ([]byte, error) {
return yaml.Marshal(c)
}
func (c *Collection) Deserialize(raw []byte) error {
return yaml.Unmarshal(raw, c)
}
我的测试序列化一个集合,然后尝试将第一个集合中的原始数据反序列化到第二个集合中。然后它将比较两个集合,但在反序列化过程中会出现问题:
func TestDeserialize(t *testing.T) {
c := NewCollection()
// NewRect creates a Rect (inherits from Object)
c.AddObject(NewRect(10,10,NewPos(0,0))
c2 := NewCollection()
v raw, err := c.Serialize()
if err != nil {
t.Fatalf("collection 1 failed to serialize: %v", err)
}
// deserialize raw 1 into 2
// this is the call that fails
err = c2.Deserialize(raw)
if err != nil {
t.Fatalf("collection 2 failed to deserialize: %v", err)
}
}
这是我一直遇到的错误:
panic: reflect.Set: value of type map[interface {}]interface {} is not assignable to type bw.Object [recovered]
panic: reflect.Set: value of type map[interface {}]interface {} is not assignable to type bw.Object [recovered]
panic: reflect.Set: value of type map[interface {}]interface {} is not assignable to type bw.Object
编辑:
我忘了包括Object 的定义。 Object是一个很基础的界面:
type Object interface {
Update()
Draw()
Serialize()
Deserialize()
}
【问题讨论】:
-
Object的定义是什么? -
@BurakSerdar 添加了对象定义。谢谢。
标签: json go serialization yaml deserialization