2010-02-13 4 views
1

오라클 생성 XML 샘플 다음에 에 대한 클래스를 생성하기 위해 xsd.exe 도구를 사용하려했지만 항상 올바르게 가져 오지 못했습니다. oracle XML 요소 이름을 클래스 이름으로 변경하려고 할 때, 구체적으로 ROWSET 및 ROW 부분에 대해 부분을 처리하는 방법을 잘 모르겠습니다.XML 역 직렬화

시리얼 라이즈/비 직렬화 비즈니스에 대해 아주 새롭기 때문에 이것은 조금 더 많은 사람을 위해 구현하는 것이 매우 쉽다는 것을 알고 있습니다. 지식으로 제게 도와주세요.

[XmlRoot("ROWSET")] 
class Department 
{ 
    [XmlElement("DEPARTMENT_ID")] 
    string DepID { set; get; } 
    [XmlElement("DEPARTMENT_NAME")] 
    string DepName { set; get; } 
    [XmlElement("EMPLOYEES")] 
    Employee[] Employees { set; get; } 
} 
class Employee 
{ 
    [XmlElement("EMP_ID")] 
    string DepID { set; get; } 
    [XmlElement("EMP_NAME")] 
    string DepName { set; get; } 
} 

그러나 이것은 솔직히 내가 방법을 모르는 그것이 될 수있는 ROW 요소를 찾을 수 없습니다 불평 런타임에 작동하지 : 나는 부서 및 직원에 대한 2 개 클래스를 만들었습니다

코드에서이를 무시하고 다음 노드부터 시작하십시오. 나는 xsd.exe가 나를 도울 것이지만 원치 않는 많은 데이터를 생성하고 이름을 수동으로 분류하도록 남겨 둡니다. 은 자동화 도구 인 을 사용하지 않고이 작업을 수행하는 방법을 정말 배우고 싶습니다.

많은 감사,

마야

<?xml version="1.0"?> 
<ROWSET> 
    <ROW> 
    <DEPARTMENT_ID>1</DEPARTMENT_ID> 
    <DEPARTMENT_NAME>Sales</DEPARTMENT_NAME> 
    <EMPLOYEES> 
     <EMP> 
     <EMP_ID>12</EMP_ID> 
     <EMP_NAME>Fred</EMP_NAME> 
     </EMP> 
     <EMP> 
     <EMP_ID>13</EMP_ID> 
     <EMP_NAME>Hohn</EMP_NAME> 
     </EMP> 
    </EMPLOYEES> 
    </ROW> 
    <ROW> 
    <DEPARTMENT_ID>2</DEPARTMENT_ID> 
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME> 
    <EMPLOYEES></EMPLOYEES> 
    </ROW> 
</ROWSET> 
+0

당신이 할 수있는 클래스를 선언해야합니다 여기 를 사용해, 지정된 XML 구조에 Department 인스턴스를 직렬화하는 방법의 예 부서 소장품을 보관하십시오. XmlArrayAttribute를 확인하십시오. –

답변

2

당신은 추가 클래스 을 만들어야 할 수도 있습니다. 또한 클래스와 속성이 공개되어 있는지 확인하십시오.

[XmlRoot("ROWSET")] 
public class Department 
{ 
    [XmlElement("ROW")] 
    public Row[] Rows { get; set; } 
} 

public class Row 
{ 
    [XmlElement("DEPARTMENT_ID")] 
    public string DepID { set; get; } 

    [XmlElement("DEPARTMENT_NAME")] 
    public string DepName { set; get; } 

    [XmlArray("EMPLOYEES")] 
    [XmlArrayItem("EMP")] 
    public Employee[] Employees { set; get; } 
} 

public class Employee 
{ 
    [XmlElement("EMP_ID")] 
    public string EmpID { set; get; } 

    [XmlElement("EMP_NAME")] 
    public string EmpName { set; get; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var dep = new Department 
     { 
      Rows = new[] 
      { 
       new Row 
       { 
        DepID = "1", 
        DepName = "Sales", 
        Employees = new[] 
        { 
         new Employee 
         { 
          EmpID = "12", 
          EmpName = "Fred" 
         }, 
         new Employee 
         { 
          EmpID = "13", 
          EmpName = "Hohn" 
         } 
        } 
       }, 
       new Row 
       { 
        DepID = "2", 
        DepName = "Marketing", 
       } 
      } 
     }; 
     var serializer = new XmlSerializer(dep.GetType()); 
     serializer.Serialize(Console.Out, dep); 
    } 

그리고 Department 인스턴스에 다시 역 직렬화하기 :

var xml = 
@"<?xml version=""1.0""?> 
<ROWSET> 
    <ROW> 
    <DEPARTMENT_ID>1</DEPARTMENT_ID> 
    <DEPARTMENT_NAME>Sales</DEPARTMENT_NAME> 
    <EMPLOYEES> 
     <EMP> 
     <EMP_ID>12</EMP_ID> 
     <EMP_NAME>Fred</EMP_NAME> 
     </EMP> 
     <EMP> 
     <EMP_ID>13</EMP_ID> 
     <EMP_NAME>Hohn</EMP_NAME> 
     </EMP> 
    </EMPLOYEES> 
    </ROW> 
    <ROW> 
    <DEPARTMENT_ID>2</DEPARTMENT_ID> 
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME> 
    <EMPLOYEES></EMPLOYEES> 
    </ROW> 
</ROWSET>"; 

using (var reader = new StringReader(xml)) 
{ 
    var department = (Department)serializer.Deserialize(reader); 
} 
+0

대린 감사합니다. – Maya