|
XmlSerializer+base class+XmlTextAttribute - InvalidOperationException
|
|||
---|---|---|---|
#18+
Дано (в сжатом виде): 1. Примерно такая схема: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
В реальной рабочей схеме имеется куча объявленных xs:complexType c одинаковым набором атрибутов, эти типы отличаются только базой контента. 2. На основании схемы генерим с пом. xsd.exe класс, слегка дорабатываем напильником: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
пробуем делать десериализацию: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
- всё ок. Теперь, поскольку см. выше про кучу типов с одинаковым набором атрибутов, меняем класс RootItem так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
и при десериализации ловим: Код: plaintext 1. 2. 3. 4.
Я, конечно, могу это свойство сделать стринговым, и дополнительно завести вычисляемое на основе Value числовое свойство с XmlIgnore - но какого? Почему наличие базового класса ломает сериализацию XmlText? Что не так? И да, методом научного тыка выяснилось, что для воспроизведения ошибки достаточно, чтобы сериализумый класс просто наследовался от чего-нибудь, отличного от object - т.е. аналогичная ошибка будет и вот в такоим случае: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Это вообще можно как-нибудь побороть? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2021, 06:45 |
|
XmlSerializer+base class+XmlTextAttribute - InvalidOperationException
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, не поможет? https://docs.microsoft.com/ru-ru/dotnet/api/system.xml.serialization.xmlincludeattribute?view=net-5.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2021, 12:13 |
|
XmlSerializer+base class+XmlTextAttribute - InvalidOperationException
|
|||
---|---|---|---|
#18+
ЕвгенийВ Сон Веры Павловны, не поможет? https://docs.microsoft.com/ru-ru/dotnet/api/system.xml.serialization.xmlincludeattribute?view=net-5.0 Спасибо, но увы, не помогло. Выяснилось, что это достаточно известный баг - известный в т.ч. разработчикам дотнета. Ответ от них тоже стандартный: да, знаем, раз пути обхода (в виде decorated properties) есть, то исправлять не будем, а то очень дофига придётся исправлять: https://github.com/dotnet/runtime/issues/22656 Значит, придётся использовать эти decorated properties. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2021, 13:28 |
|
|
start [/forum/topic.php?fid=20&gotonew=1&tid=1398334]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 437ms |
0 / 0 |