System.Tuple(T1,..)
классы с пометкой [SerializableAttribute]
(см. msdn). Но у них нет конструктора без параметров, поэтому он не сериализуется на XmlSerializer
, поскольку он был очищен до here. Так почему бы не добавить его?Почему кортеж не имеет конструктора без параметров, а `[Serializable]`?
ответ
Вам не нужен тип, чтобы иметь атрибут [Serializable]
для его сериализации с XmlSerializer
, а тот факт, что тип имеет атрибут, не означает, что вы можете сериализовать его с помощью XmlSerializer
; эти два не связаны друг с другом. [Serializable]
используется только для двоичной сериализации (*) (для которой не нужен конструктор без параметров).
Подводя итог:
- Binary сериализация
- требует атрибута
[Serializable]
- не требует общественного конструктора без параметров
- требует атрибута
- XML сериализации
- не требует атрибута
[Serializable]
- требует
public
Беспараметрической конструктор
- не требует атрибута
Таким образом, вы не можете сериализовать Tuple<...>
с помощью XmlSerializer
.
Независимо от вышесказанного, Tuple<...>
может иметь конструктор по умолчанию, но это не имеет особого смысла: кортежи неизменны (вы не можете установить их свойства), так что если вы создали экземпляр с по умолчанию конструктор, свойства всегда будут иметь значения по умолчанию и не могут быть изменены. (Также, тот факт, что свойства только для чтения является также то, что мешает кортежи из сериализации с XmlSerializer
, который поддерживает только свойства общественного чтения и записи)
(*) на самом деле, а не только двоичная сериализация, но любой форматировщик сериализации (например, BinaryFormatter
, SoapFormatter
...)
Этот тип юбок вокруг вопроса. Я считаю, что дух вопроса просто - почему Tuple не имеет открытого конструктора без параметров, поэтому его можно использовать с XmlSerializer? – bodangly
@ bodangly OP, кажется, думает, что, поскольку Tuple является '[Serializable]', он должен иметь конструктор без параметров и быть сериализуемым с помощью 'XmlSerializable', что не так. –
@bogdanly Я обновил свой ответ –
- 1. Вызов конструктора без параметров
- 2. InjectionUtils - Класс параметров не имеет конструктора
- 3. Почему System.Data.SqlClient.SqlDataReader не имеет конструктора
- 4. Зачем классу XML-Serializable нужен конструктор без параметров
- 5. C# сериализовать класс без конструктора без параметров
- 6. Кортежа не может быть сериализовать, потому что он не имеет конструктора без параметров
- 7. Api Контроллер имеет ошибку без параметров общественного конструктора
- 8. Определенный объект конструктора без параметров:
- 9. Array struct требует конструктора без параметров
- 10. MVC Controller без конструктора без параметров
- 11. Firebase «Пользователь не имеет конструктора без аргументов»
- 12. Почему java.lang.Void не Serializable?
- 13. Почему javax.money.CurrencyUnit не Serializable?
- 14. Имеет ли производительность Serializable hamper?
- 15. Как проверить тип для конструктора без параметров?
- 16. Почему класс Calendar не имеет общего конструктора?
- 17. Почему `std :: istream_iterator` не имеет конструктора rvalue?
- 18. Почему интерфейс интерфейса не имеет конструктора?
- 19. Почему Java не имеет конструктора копирования?
- 20. Использование объекта без параметров конструктора java
- 21. Нет конструктора без параметров для этого объекта
- 22. Вызов как базового конструктора, так и конструктора без параметров?
- 23. Почему у конструктора копирования есть несколько параметров?
- 24. кортеж не имеет атрибута «isdigit»
- 25. Как добавить экземпляр класса без параметров конструктора?
- 26. Почему атрибут называется [Serializable], а не [SerializableAttribute] (C#)
- 27. Как инициализировать кортеж с заданным классом без конструктора копирования
- 28. Почему вызов конструктора не называется?
- 29. SFINAE для параметров конструктора
- 30. Java Вызов конструктора из другого конструктора без немедленного получения параметров
Я не понимаю, почему это пропущено. Это довольно интересный вопрос для всех, кто знает, как должна работать сериализация. –
Тот, кто голосовал за закрытие, потому что он «в основном основан на мнениях», явно не понимает вопроса. –
@ThomasLevesque Вопрос заключается в том, чтобы просить людей угадать, почему этот класс рамки был разработан так, как он был. Это полностью основано на мнениях. Учитывая, что вы отправили ответ, который никоим образом не пытался ответить на заданный вопрос, а именно, почему этот класс не имеет конструктора без параметров, кажется, что вы тот, кто не понимает quesiton. – Servy