|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
Всем привет, к сожалению столкнулся со следующей проблемой. У меня есть класс, содержащий список экземпляров других классов Ориентировочно такой: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Я хочу его бинарно сериализовать, но у меня валятся ошибки сначала что FakeSerializeClass не помечен как несериализуемый, потом что BaseViewModel несериализуемый, потом что другие вспосмогательные классы, которые каким-либо образом задействованы в логике FakeSerializeClass ниже по иерархии. То есть по сути бинарный сериализатор требует выставить атрибут [Serializable] вплоть до самого верха иерархии всех классов+ всех классов, которые каким-либо образом сопряжены с ним. Но мне нужно сериализовать только SingleTonFakeSerialized, остальные классы не должны быть сериализуемыми. Очень странно, потому что XML-сериализатор сериализовал SingleTonFakeSerialized удачно и не требовал помечать как [Serializable] все родительские классы. Можно ли как-то избежать помечания всех классов как сериализуемые? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 12:11 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
vb_sub, это обыкновенное соглашение - контракт, в контексте безопасности. попробуйте другие бинарные исполнители которые работают без это маркера.. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 12:29 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
потому, что модель представления не предназначена для сериализации. вы подходите к проблеме не с той стороны. Нужно подходить со стороны данных: у меня есть данные, мне сделать сериализацию\десериализацию для них, а не у меня есть класс, мне нужно его сериализовать\десериализовать :) есть модель данных, где это всё реализуется. vb_sub Очень странно, потому что XML-сериализатор сериализовал SingleTonFakeSerialized удачно и не требовал помечать как [Serializable] все родительские классы XML-сериализатор требует помечать в родительском классе атрибутом [XmlInclude(Type)] все наследуемые типы, если что. Сделайте как нормальные люди. Создайте модель данных которая будет сериализовывать\десериализовывать данные в какие то типы. После когда загрузили\десериализовали данные создаете модель представления и передаете этот объект данных туда. В модели управляете этим объектом и если нужно сохраняете его. Таким образом вы отделите мух от котлет и меня модель представления это не будет отражаться на формате данных с которым работает ваша программа, а люди которые потом будут сопровождать это, не будут ломать голову и вспоминать вас плохим словом :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 12:48 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
Roman Mejtes, то есть если XML-сериализатор может сериализовать класс вместе с его внутренней структурой( например вложенные иерархические элементы), то для бинарного необходимо все преобразовать в набор простых типов данных, убрать всю иерархию элементов внутри класса и тд? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 14:54 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
vb_sub, Можно извернуться с помощью SurrogateSelector'а: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128.
консольный вывод: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 15:36 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
вот вам пример, бинарная сериализация, абстрактный класс, с иерархией, всё работает у вас проблема только в том, что вы пытаетесь десериализовывать модель представления, что в корне неверно Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
Результат выполнения: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 15:49 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
Roman Mejtesвот вам пример, бинарная сериализация, абстрактный класс, с иерархией, всё работает у вас проблема только в том, что вы пытаетесь десериализовывать модель представления, что в корне неверно Ну, если в обычной модели данных в иерархии будут классы без атрибута сериализации, то это не взлетит без доп. усилий. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 16:01 |
|
Бинарная сериализация наследуемых классов
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, ну очевидно, что атрибут должен быть. если есть тип в модели, у которого такого атрибута нет и он доступен только из готовой сборки, то можно просто обернуть его своим типом, не особо сложная операция, если объект конечно не очень большой. Ну, а если он большой и сложный, то можно создать полностью свою модель, а после загрузки уже инициализировать нужные классы модели. а потом на всё этом создавать модель представления из которой управлять всем этим варевом ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 16:21 |
|
|
start [/forum/topic.php?fid=20&msg=39571333&tid=1399562]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 183ms |
0 / 0 |