为 XmlSerializer 使用默认构造函数的正确方法是什么?

What's correct way to use default constructor for XmlSerializer?

你能帮我找出一个错误吗? 我正在尝试使用 XmlSerialize:

public static void ProcessLines(List<string> allLines, out pfm pfm)
    {
        ...
        pfm = newPfm;
        pfm forseril = new pfm("");
        XmlSerializer mySerializer = new XmlSerializer(typeof(pfm));
        StreamWriter myWriter = new StreamWriter("myFileName.xml");
        mySerializer.Serialize(myWriter, forseril);
        myWriter.Close();

    }

这是我认为应该是默认构造函数的东西:

 [Serializable]
    [XmlRoot(ElementName = "Pfm", Namespace = null)]
    public class pfm
    {

        public pfm(string data)
        {
            this.data = data;
        }

        public string data;

        public Ctl ctl
        {
            get;
            set;
        }

        [XmlAttribute(AttributeName = "Name")]
        public string Name
        {
            get;
            set;
        }

    }

我使用了来自 Microsoft 站点的说明:instruction

XmlSerializer 需要的是 无参数构造函数 -- 没有参数的 constructor。因此,您的 pfm 需要一个构造函数,如下所示:

public class pfm
{
    pfm() : this("") { }

    public pfm(string data)
    {
        this.data = data;
    }
}

不需要public。示例 fiddle.