2011-03-14 7 views
1

오브젝트를 xml로 변환해야하고 몇 가지 기사를 작성해야합니다. 그러나 "XML 문서를 생성하는 동안 오류가 발생했습니다. 소스 유형이 대상 유형과 동일한 지 확인하십시오." 다음은 오브젝트를 xml로 변환

다음은 내가

List<BillDetails> billlist = new List<BillDetails>();  
    public int x;  
    List<Details> newdetails = new List<Details>();  

public void Button1_Click(object sender, EventArgs e) 
    { 
     if (Session["x"] == null) 
      { 
       newdetails.Add(new Details() { Code = Code.Text, MCode = MCode.Text}); 
       billlist.Add(new BillDetails() { Cat = Cat.Text, Details = newdetails.ToList(), CustomerName = CustomerName.Text }); 
       //Code to bindGrid      
       Session["x"] = newdetails; 
       serializetoxml(billlist); 

      } 

    private void serializetoxml(List<BillDetails> billlist) 
    { 
     XmlSerializer myserializer = new XmlSerializer(typeof(BillDetails)); 
     TextWriter mywriter = new StreamWriter("C:\\billlist.xml"); 
     myserializer.Serialize(mywriter, billlist);--- Error is thrown here 
     mywriter.Close(); 
    } 

가 도와주세요 오류를 얻고있다 코드가 내 코드

namespace XYZ { 
    [Serializable] 
[XmlRoot("details")]  
public class Details 
{ 
    private string code; 

    [XmlAttribute ("code")] 
    public string Code 
    { 
     get { return code; } 
     set { code= value; } 
    } 

    private string mcode; 

    [XmlAttribute("mcode")] 
    public string MCode 
    { 
     get { return mcode; } 
     set { mcode= value; } 
    }  
    } 
} 

다른 클래스 파일이

namespace ABC 
{ 
[Serializable] 
[XmlRoot("BillDetails")] 
public class BillDetails 
{ 
    private string cat; 

    [XmlAttribute("Cat")] 
    public string Cat 
    { 
     get { return cat; } 
     set { cat= value; } 
    } 

    private string customername; 

    [XmlAttribute("CustomerName")] 
    public string CustomerName 
    { 
     get { return customername; } 
     set { customername = value; } 
    } 

    private List<Details> details; 

    [XmlArray("Details")] 
    [XmlArrayItem("details")] 
    // public List<Details> details = new List<Details>(); 
    public List<Details> Details 
    { 
     get { return details; } 
     set { details = value; } 
    } 
} 
} 

아래에 붙여이다 정정 해줘.

답변

3

제게 돋보이는 오류는 XmlSerializer에 실제로 BillDetails의 목록 인 경우 BillDetails임을 알리는 것입니다. billlist 유형 BillDetails의 것이 아니라 List<BillDetails>

당신이

XmlSerializer myserializer = new XmlSerializer(typeof(List<BillDetails>)); 
+0

정말 고맙습니다. 코드가 실행 중입니다. 완전히 빠뜨린 것입니다! :) – Janet

6

오류는 ctor에로 BillDetails) :

XmlSerializer myserializer = new XmlSerializer(typeof(List<BillDetails>)); 
+0

당신의 대답에 투표를 어떻게 추가합니까? stackoverflow에 새로 – Janet

+0

나는 당신이 투표를 위해 최소한 50 명의 담당자가 필요하다고 생각합니다. –

1

당신이 (당신이 왜 간단한 배치해야합니까, 직렬화합니다 List<BillDetails> 유형으로 직렬을 구성 해봤 시도 할 수 있기 때문에

+0

정말 고맙습니다. 코드가 실행 중입니다. 완전히 빠뜨린 것입니다! :) – Janet

1
XmlSerializer myserializer = new XmlSerializer(typeof(BillDetails)); 

당신은 BillDetails 타입에 대한 시리얼 라이저를 구성하고 있지만, 이것을 List<BillDetails>으로 전달하고 있습니다. 시리얼 라이저는이를 처리 할 수 ​​없습니다.