Я не уверен, что это причина, но она позволяет (или разрешает, поскольку теперь есть лучшие способы сделать это) для объекта, который будет использоваться как блокировка:
Object lock = new Object();
....
synchronized(lock)
{
}
Насколько я понял, вы хотите отфильтровать ваш XML перед сериализацией.
Я предлагаю вам использовать LINQ
для этого:
var filteredMaps = Maps.Where(map => !string.IsNullOrWhiteSpace(map.Item)).ToList();
Обратите внимание на вызов .ToList()
в конце строки. Это важно, так как ваш XmlSerializer
имеет тип List<Map>
, я полагаю. Поместите эту строку перед сериализацией объекта, и результат должен выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Map item="something" uri="foo" />
</ArrayOfMap>
Не забывайте using System.Linq;
Ну, вы можете попробовать создать XmlWriter, который отфильтровывает все элементы с атрибутом xsi: nil или содержит пустую строку и передает все остальные вызовы базовому стандартному XmlWriter для «очистки» сериализованного XML.