序列化c#属性时,将父节点放在前面

本文关键字:父节点 在前面 属性 序列化 | 更新日期: 2023-09-27 17:54:16

我想将以下类序列化为xml:

public class Survey
{
    [XmlElement("edit")]
    public string EditLink { get; set; }
}

正如预期的那样,这序列化为(删除了对问题不重要的额外内容)

<Survey><edit>http://example.com/editlink</edit></Survey>

但是,我想在编辑节点前添加一个父节点,因此生成的xml是:

<Survey><links><edit>http://example.com/editlink</edit></links></Survey>

是否有一种方法可以只使用序列化属性而不修改类的结构?

序列化c#属性时,将父节点放在前面

这个结构不能。如果您将EditLink暴露为集合,则可以:

public class Survey
{
    [XmlArray("links")]
    [XmlArrayItem("edit")]
    public string[] edit 
    {
        get 
        {
            return new [] {EditLink};
        } 
        set 
        {
            EditLink = value[0];
        }
    }
    [XmlIgnore]
    public string EditLink { get; set; }
}

收益率:

<Survey>
    <links>
        <edit>http://example.com/editlink</edit>
    </links>
</Survey>

您可以尝试使用XMLSerializer类。

  public class Survey
  {    
      public string EditLink { get; set; }
  }
  private void SerializeSurvey()
  {
     XmlSerializer serializer = new XmlSerializer(typeof(Survey));
     Survey survey = new Survey(){EditLink=""};
     // Create an XmlTextWriter using a FileStream.
     Stream fs = new FileStream(filename, FileMode.Create);
     XmlWriter writer =  new XmlTextWriter(fs, Encoding.Unicode);
     // Serialize using the XmlTextWriter.
     serializer.Serialize(writer, survey);
     writer.Close();
  }