Когда я пытаюсь сериализовать словарь, все работает нормально. но когда я десериализую, он показывает, что число равно 0. Но он отлично работает со списком. Что происходит, когда мы десериализируем список и словарь?Проблема десериализации с помощью словаря
ответ
Словари на самом деле не поддерживают сериализацию. Это известная проблема, которая беспокоит многих программистов, поэтому, если вы выполните «Сериализация словаря .NET», вы получите много результатов с «практическими» и обходными решениями.
Например, этот blog post предлагает использовать класс KeyedCollection.
Вы правильно относитесь к словарям, но исключения могут быть сериализованы. – Timores
@ Тимуры, я удалил часть об исключениях. У меня возникли проблемы с сериализацией исключений из-за содержащегося в нем члена словаря, но это может быть связано с определенным типом исключения, которое я сериализую, или тем фактом, что я использовал XmlSerializer, или, может быть, даже в том, что я использовал VB. В любом случае, я не думаю, что вы можете вообще сказать, что все исключения являются сериализуемыми, я подозреваю, что правда находится где-то посередине. Пожалуйста, уточните, если у вас есть дополнительная информация по этому вопросу. –
В общем, не все классы сериализуемы, я согласен. И мы должны определить, говорим ли мы о бинарной сериализации или сериализации XML. Я думал о первом, где вы можете реализовать ISerializable, чтобы перенести процесс сериализации и сериализовать класс со встроенным словарем. Вы можете использовать любой язык .NET, между прочим, все они семантически эквивалентны. – Timores
Если вы используете .Net 3.5, вы можете использовать DataContractSerializer, который будет сериализовать словарь. Это также быстрее, чем BinaryFormatter или XmlSerializer.
using System.Runtime.Serialization;
var dict = new Dictionary<string, string>();
dict.Add("a","a");
DataContractSerializer dcs = new DataContractSerializer(dict.GetType());
MemoryStream byteStream = new MemoryStream();
dcs.WriteObject(byteStream, dict);
byteStream.Position = 0;
var dict2 = dcs.ReadObject(byteStream);
- 1. Проблема десериализации с помощью GZip
- 2. словаря десериализации вернуть Null
- 3. проблема десериализации с DataContractJsonSerializer
- 4. Json проблема десериализации с #
- 5. десериализации общего словаря, используя Json.NET
- 6. Проблема десериализации JSON.NET
- 7. Проблема с пониманием словаря
- 8. Проблема странной десериализации
- 9. Проблема десериализации CXF/RestTemplate
- 10. Проблема десериализации зерновых PortableBinaryArchive
- 11. Проблема сериализации/десериализации Silverlight
- 12. Проблема десериализации GSON
- 13. Проблема десериализации XML
- 14. Проблема десериализации в OSGi
- 15. десериализации с помощью Xstream
- 16. Проблема десериализации в .NET
- 17. IoC и проблема десериализации
- 18. XML проблема десериализации
- 19. HttpContent.ReadAsAsync Проблема десериализации
- 20. Проблема десериализации XML строка
- 21. vb.net json.net проблема десериализации
- 22. ns1: проблема десериализации C#
- 23. C проблема # XML десериализации
- 24. C# проблема десериализации java
- 25. Проблема десериализации объектов xml?
- 26. Проблема десериализации файла xml
- 27. Проблема десериализации XAML
- 28. Проблема десериализации общих списков с C# XmlSerializer
- 29. Почему косяк Newtonsoft.Json десериализации словаря списка
- 30. десериализации C# Словаря в MongoDB Возвращает Null
Покажите нам код! – spender
Какой сериализатор? Это имеет значение ** много **? Это 'XmlSerializer'? 'BinaryFormatter'? 'DataContractSerializer'? 'NetDataContractSerializer'? JSON? proto bufs? МЫЛО? Я боюсь, что у каждого есть тонкое поведение. Многие (не все) * do * поддерживают сериализацию словаря. Вам также могут потребоваться дополнительные шаги, если вы сделали пользовательскую сериализацию ('ISerializable' и т. Д.). –
Я пытаюсь сериализовать использование BinaryFormatter .. – sandhya