Для такого класса:
public class A {
public FrozenSet Foo {get; set;}
}
с XML:
1
2
3
Попытка десериализации этого как есть вызывает исключение System.InvalidOperationException с сообщением «Вы должны реализовать метод доступа по умолчанию для System.Collections.Frozen.FrozenSet`1 [...], поскольку он наследуется от ICollection».
Изменение A.Foo на HashSet позволяет мне прекрасно десериализовать, как ожидаемо. Я попытался использовать HashSet в качестве прокси для замороженного члена набора:
[XmlElement(ElementName = nameof(Foo))]
public HashSet FooProxy
{
get => Foo?.ToHashSet() ?? [];
set => Foo = value.ToFrozenSet();
}
но это приводит к еще одному исключению InvalidOperationException с сообщением «В XML-документе (3, 8) есть ошибка [...] методы ReadElementContentAs() не могут быть вызваны для элемента, у которого есть дочерние элементы. Строка 3, позиция 8».
Я не хочу использовать обычный хэш-набор, потому что этот код используется для объекта настроек программы. Эти настройки будут считываться в нескольких потоках и много раз (не менее 100 000 проверок), поэтому мы ценим дополнительную скорость, которую FrozenSet предлагает по сравнению с HashSet.
Использование этого предложения (обертывание HashSet в другой класс и использование его в качестве типа прокси для целевого замороженного набора) позволило мне заставить что-то работать, но это делает XML и код немного более неуклюжим, чем я например.
Другие вопросы касаются незамороженных коллекций, которые не решают проблемы, которые кажутся уникальными для замороженных коллекций.
Полный, самый простой и работоспособный пример кода:
using System.Collections.Frozen;
using System.Xml.Serialization;
var xml = """
1
2
3
""";
var xmlSeriailizer = new XmlSerializer(typeof(A));
StringReader reader = new StringReader(xml);
A a = (A)xmlSeriailizer.Deserialize(reader)!;
foreach (int i in a.Foo)
Console.WriteLine(i);
public class A
{
public FrozenSet Foo { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... frozen-set
Десериализовать список XML в замороженный набор ⇐ C#
Место общения программистов C#
-
Anonymous
1765906738
Anonymous
Для такого класса:
public class A {
public FrozenSet Foo {get; set;}
}
с XML:
1
2
3
Попытка десериализации этого как есть вызывает исключение System.InvalidOperationException с сообщением «Вы должны реализовать метод доступа по умолчанию для System.Collections.Frozen.FrozenSet`1 [...], поскольку он наследуется от ICollection».
Изменение A.Foo на HashSet позволяет мне прекрасно десериализовать, как ожидаемо. Я попытался использовать HashSet в качестве прокси для замороженного члена набора:
[XmlElement(ElementName = nameof(Foo))]
public HashSet FooProxy
{
get => Foo?.ToHashSet() ?? [];
set => Foo = value.ToFrozenSet();
}
но это приводит к еще одному исключению InvalidOperationException с сообщением «В XML-документе (3, 8) есть ошибка [...] методы ReadElementContentAs() не могут быть вызваны для элемента, у которого есть дочерние элементы. Строка 3, позиция 8».
Я не хочу использовать обычный хэш-набор, потому что этот код используется для объекта настроек программы. Эти настройки будут считываться в нескольких потоках и много раз (не менее 100 000 проверок), поэтому мы ценим дополнительную скорость, которую FrozenSet предлагает по сравнению с HashSet.
Использование этого предложения (обертывание HashSet в другой класс и использование его в качестве типа прокси для целевого замороженного набора) позволило мне заставить что-то работать, но это делает XML и код немного более неуклюжим, чем я например.
Другие вопросы касаются незамороженных коллекций, которые не решают проблемы, которые кажутся уникальными для замороженных коллекций.
Полный, самый простой и работоспособный пример кода:
using System.Collections.Frozen;
using System.Xml.Serialization;
var xml = """
1
2
3
""";
var xmlSeriailizer = new XmlSerializer(typeof(A));
StringReader reader = new StringReader(xml);
A a = (A)xmlSeriailizer.Deserialize(reader)!;
foreach (int i in a.Foo)
Console.WriteLine(i);
public class A
{
public FrozenSet Foo { get; set; }
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79848772/deserialize-xml-list-into-frozen-set[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия