C#XmlSerializer错误参数

时间:2013-12-21 15:34:58

标签: c# xmlserializer

我在这段代码上收到错误(// THIS LINE)。 错误说:无法序列化,因为它们没有无参数构造函数。

public static void SchrijfKlanten(Klant klant, string pad) {
    using (FileStream file = File.Open(pad, FileMode.OpenOrCreate)) {
    XmlSerializer xml = new XmlSerializer(klant.GetType()); //THIS LINE
    xml.Serialize(file, klant);
    }
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您应该向Klant类添加无参数构造函数:

class Klant
{
  public Klant()
  {
     //Any logic if you have
  }
}

答案 1 :(得分:0)

Serializer类需要一个无参数构造函数,以便在反序列化时可以创建一个新实例。之后,它复制从序列化数据中获取的每个公共财产。

如果您想避免在没有参数的情况下创建构造函数,可以轻松地将构造函数设为私有。

EX:

using System;
using System.IO;
using System.Xml.Serialization;

namespace App
{
    public class SchrijfKlanten
    {
        public SchrijfKlanten(Klant klant, string pad)
        {

            using (FileStream file = File.Open(pad, FileMode.OpenOrCreate))
            {
                XmlSerializer xml = new XmlSerializer(klant.GetType()); //THIS LINE

                xml.Serialize(file, klant);
            }
        }

        private SchrijfKlanten() { }



        // cut other methods
    }
    [Serializable()]
    //Ensure there is a parameter less constructor in the class klant
    public class Klant
    {
        internal Klant()
        {
        }

        public string Name { get; set; }

        public static String type { get; set; }
         public static Type IAm { get; set; }
    }
}