将字符串列表序列化为属性

本文关键字:属性 序列化 列表 字符串 | 更新日期: 2023-09-27 18:19:00

我正在处理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);
}

将字符串列表序列化为属性

您可以在序列化期间忽略array(仅将其用作后备存储),并添加一个将被序列化和反序列化的属性:

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(',');
        }
    }
}