我正在尝试格式化自定义时间类型 Date,它实现了 Marshaler 接口,并在编写为 XML 时简单地将自身格式化为“2006-01-02”。type Person struct { ... DateOfBirth Date `xml:"DOB,attr"` ...}type Date time.Timefunc (d Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error { dateString := fmt.Sprintf("\"%v\"", time.Time(d).Format("2006-01-02")) e.EncodeElement(dateString, start) return nil}我使用这个 SO作为参考,但错误 - &xml.UnsupportedTypeError{Type:(*reflect.rtype)} - 被抛出。我错过了一些东西,有什么想法吗?
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
您正在实现错误的接口。
由于 Date 类型旨在作为属性进行封送处理(如xml:"DOB,attr"标签所示),因此它需要实现xml.MarshalerAttr接口:
type MarshalerAttr interface {
MarshalXMLAttr(name Name) (Attr, error)
}
所以你可能需要添加这样的代码:
func (d Date) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
dateString := time.Time(d).Format("2006-01-02")
attr := xml.Attr {
name,
dateString,
}
return attr, nil
}
请注意,我从值字符串中删除了明显不必要的引号。
- 1 回答
- 0 关注
- 273 浏览
添加回答
举报
0/150
提交
取消