русский
Germany.ruForen → Архив Досок→ Programmierung

C# - Забавная штука со штатным JSON сериализатором

24.01.23 18:30
C# - Забавная штука со штатным JSON сериализатором
 
alex445 коренной житель
Zuletzt geändert 24.01.23 18:30 (alex445)

Берём составной тип, но в принципе ничего сложного. Только есть свойство-коллекция с типом-интерфейсом - скажем, 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. В одном случае оббревиатура через маленькие буквы, в другом - через большие.

 

Sprung zu