Немногие из тегов XML не декодируются при чтении тела запроса.
Я определил свою вложенную структуру с тегами json и xml, так как я хочу использовать одну и ту же схему для запроса и ответа в обоихjson и xml.
var dataNewTestplans DataTestplan
err := xml.NewDecoder(r.Body).Decode(&dataNewTestplans)
xmlData, _ := xml.Marshal(dataNewTestplans)
fmt.Printf(string(xmlData))
Структура DataTestplan:
type DataTestplan struct {
Data []Testplan `json:"data" xml:"data"`
}
Структура тестового плана:
type Testplan struct {
Group string `json:"group" xml:"group"`
Name string `json:"name" xml:"name"`
Parameters []Parameter `json:"parameters,omitempty" xml:"parameters,omitempty"`
Released bool `json:"released" xml:"released"`
Teststeps []Teststep `json:"teststeps,omitempty" xml:"teststeps,omitempty"`
Version int32 `json:"version" xml:"version"`
}
Структура параметра:
type Parameter struct {
XMLName xml.Name `xml:"parameters"`
Comment string `json:"comment" xml:"comment"`
Description string `json:"description,omitempty" xml:"description,omitempty"`
}
Тестовый шагstruct:
type Teststep struct {
XMLName xml.Name `xml:"teststeps"`
AslID string `json:"aslId,omitempty" xml:"aslID"`
Bin int32 `json:"bin,omitempty" xml:"bin"`
}
XML отправлено:
<root>
<data>
<element>
<group>TEST</group>
<name>TEST</name>
<parameters>
<element>
<comment>test</comment>
<description>test</description>
</element>
<element>
<comment>test1</comment>
</element>
</parameters>
<released>true</released>
<teststeps>
<element>
<bin>32</bin>
</element>
</teststeps>
<version>1</version>
</element>
</data>
</root>
XML декодировано:
<DataTestplan>
<data>
<group></group>
<name></name>
<released>false</released>
<version>0</version>
</data>
</DataTestplan>
Я понимаю, что пропущенные теги, скорее всего, связаны с отсутствием тегов xml вопределение структуры, но я не уверен, почему в декодированной информации отсутствует значение для тегов?Что за хитрость в кодировке XML и JSON?