C# - Забавная штука со штатным JSON сериализатором
Берём составной тип, но в принципе ничего сложного. Только есть свойство-коллекция с типом-интерфейсом - скажем, IEnumerable<int>. Далее сериализуем в джейсон, затем десериализуем, и снова сериализуем, но уже в XML - получаем ошибку
ошибка: System.Text.Json.JsonElement was not expected. Use XmlInclude or SoapInclude attribute to specify types that are not known statically.
Откуда этот JsonElement взялся? Десериализатор там что-то своё добавляет?
Кто не понял:
object - JsonSerializer.Serialize - JSON string - JsonSerializer.Deserialize - object - XmlSerializer.Serialize - ошибка
Похоже, ошибка именно в десериализации через встроенный в Дотнет JsonSerializer, т.к. если эту же джейсонку скормить сериализатору от NewtonSoft, то он такой херни не делает. Т.е. после его десериализации, дотнетовский XML-сериалайзер нормально сериализует объект.
object - JsonSerializer.Serialize - JSON string - (NewtonSoft)
JsonConvert.DeserializeObject - object - XmlSerializer.Serialize - успех
object - JsonConvert.SerializeObject - JSON string - JsonConvert.DeserializeObject - object - XmlSerializer.Serialize - успех
PS. Кстати, у МС у самой неконсистентность в названиях - пространства имён Xml и IO. В одном случае оббревиатура через маленькие буквы, в другом - через большие.