2013-12-21 1 views
0

이 코드 (//이 줄)에 오류가 발생합니다. 오류 메시지가 : 매개 변수가없는 생성자가 없기 때문에 직렬화 할 수 없습니다.C# XmlSerializer 오류 매개 변수

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); 
    } 
} 

어떻게 해결할 수 있습니까?

+0

이'Klant' 유형에 매개 변수가없는 생성자를 추가! – nemesv

+0

@nemesv XML 파일의'Klant' 필드를 어떻게 넣을 수 있습니까? –

+0

이 대답을 확인해보십시오. -http : //stackoverflow.com/questions/267724/why-xml-serializable-class-need-a-parameterless-constructor – SoftwareCarpenter

답변

0

시리얼 라이저 클래스는 매개 변수가없는 생성자가 필요합니다. 그런 다음 직렬화 된 데이터에서 가져온 모든 공용 속성을 복사합니다.

매개 변수없이 생성자를 만들지 않으려면 쉽게 생성자를 비공개로 만들 수 있습니다.

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; } 
    } 
} 
+0

내 변수가 XML 파일에 포함되도록 매개 변수가없는 메소드는 무엇이되어야합니까? –

+0

SchrijfKlanten()을 개인 생성자로 사용합니다. – SoftwareCarpenter

+0

그건 문제가 아니야, 내 변수가 XML에 들어갈 수 있도록 어떤 코드가'public Klant()'의 생성자에 있어야하는지. –

0

당신은 클래스 Klant에 매개 변수가없는 생성자를 추가해야합니다 : 그것은 직렬화 복원 된 경우 새로운 인스턴스를 생성 할 수 있도록

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

내 변수가 XML에 포함되도록 생성자 public Klant()에 어떤 코드가 있어야합니까? –