Я работаю с XML-сериализацией, до сих пор делаю это хорошо. Тем не менее, я наткнулся на проблему, и мне жаль, если вы, ребята, не сможете мне помочь.
У меня есть класс:
public class FrameSection
{
[XmlAttribute]
public string Name { get; set; }
[XmlAttribute]
public string[] StartSection { get; set; }
}
После сериализации я получил что-то вроде этого:
<FrameSection Name="VAR1" StartSection="First circle Second circle"/>
Проблема заключается в десериализации, я получил четыре элемента, а не два, поскольку пространство используется как разделитель, интересно, могу ли я использовать другой разделитель.
Примечание. Я знаю, что могу удалить [XmlAttribute]
чтобы решить проблему, но я предпочитаю эту структуру, потому что она более компактна.
Код сериализации:
using (var fileStream = new System.IO.FileStream(FilePath, System.IO.FileMode.Create))
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ModelElements));
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
settings.Indent = true;
settings.Encoding = Encoding.UTF8;
settings.CheckCharacters = false;
System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(fileStream, settings);
serializer.Serialize(writer, allElements);
}
Вы можете игнорировать массив во время сериализации (просто используйте его как хранилище) и добавьте свойство, которое будет сериализовано и десериализовано:
public class FrameSection
{
[XmlAttribute]
public string Name { get; set; }
[XmlIgnore]
public string[] StartSection { get; set; }
[XmlAttribute("StartSection")]
public string StartSectionText
{
get { return String.Join(",", StartSection); }
set { StartSection = value.Split(','); }
}
}
Я использовал здесь запятую как разделитель элементов массива, но вы можете использовать любой другой символ.
Я не знаю, как изменить поведение сериализации массива, но если вы сделаете следующее изменение в своем классе FrameSection, вы должны получить желаемое поведение.
public class FrameSection
{
[XmlAttribute]
public string Name { get; set; }
public string[] StartSection { get; set; }
[XmlAttribute]
public string SerializableStartSection
{
get
{
return string.Join(",", StartSection);
}
set
{
StartSection = value.Split(',');
}
}
}