我想反序列化一个包含某个接口数组的对象Entity
:
type Result struct {
Foo int;
Bar []Entity;
};
Entity
是由许多结构类型实现的接口。JSON 数据使用每个实体中的“类型”字段来标识结构类型。例如
{"type":"t1","field1":1}
{"type":"t2","field2":2,"field3":3}
我将如何以Result
正确填充数组的方式反序列化类型。据我所知,我必须:
UnmarshalJSON
上实施Result
。- 解析
Bar
为[]*json.RawMessage
. - 将每个原始消息解析为
map[string]interface{}
. - 检查原始消息中的“类型”字段。
- 创建适当类型的结构。
- 再次解析原始消息,这次解析到刚刚创建的结构中。
这一切听起来非常乏味和无聊。有一个更好的方法吗?或者我是在倒退,并且有一种更规范的方法来处理异构对象数组?